[MySQL] Join, Count e Order (ASC & DESC)...

RedWarrior

Nuovo Utente
17 Giu 2009
15
0
1
Salve a tutti.
Ho 2 tabelle:
- noleggi (id, data, gioco, socio);
- giochi (di cui mi interessa solo il campo nome e numscaff per metterlo in relazione con l'altra tabella).

Ciò che vorrei visualizzare da queste due tabelle è, in pratica, una tabella html con la classifica settimanale dei giochi più noleggiati.
Il problema nasce nel momento in cui vado a inserire nei <th></th> della tabella due link che modifichino l'ordine dei risultati.
Per essere più chiaro posto il codice che ho realizzato finora:
Codice:
<body>
<?php
include_once('conn.php');
$order = $_GET['order'] != "" ? $_GET['order'] : "class";
$az = $_GET['az'] != "" ? $az : "DESC";
?>
<h2>CLASSIFICA SETTIMANALE</h2>
</div>
<table>
<tr>
 <th>N&deg;</th>
 <th><a href="statsett.php?order=ns">Numero Scaffale</a><br /><a href="statsett.php?order=ns&az=ASC"><img src="img/up.png" alt="ASC"/></a>&nbsp;&nbsp;&nbsp;<a href="statsett.php?order=ns&az=DESC"><img src="img/down.png" alt="DESC"/></a></th>
 <th><a href="statsett.php?order=gioco">Gioco</a><br /><a href="statsett.php?order=gioco&az=ASC"><img src="img/up.png" alt="ASC"/></a>&nbsp;&nbsp;&nbsp;<a href="statsett.php?order=gioco&az=DESC"><img src="img/down.png" alt="DESC"/></a></th>
 <th><a href="statsett.php?order=class">Noleggi</a><br /><a href="statsett.php?order=class&az=ASC"><img src="img/up.png" alt="ASC"/></a>&nbsp;&nbsp;&nbsp;<a href="statsett.php?order=class&az=DESC"><img src="img/down.png" alt="DESC"/></a></th>
 </tr>
 
<?php




$x_pag = 25;

// Recupero il numero di pagina corrente.
// Generalmente si utilizza una querystring
$pag = isset($_GET['pag']) ? $_GET['pag'] : 1;

// Controllo se $pag è valorizzato e se è numerico
// ...in caso contrario gli assegno valore 1
if (!$pag || !is_numeric($pag)) $pag = 1;


// Uso mysql_num_rows per contare il totale delle righe presenti all'interno della tabella
$all_rows = mysql_num_rows(mysql_query("SELECT noleggi.gioco AS ns, COUNT(*) AS class, giochi.nome AS gioco FROM noleggi INNER JOIN giochi ON giochi.numscaff = noleggi.gioco WHERE DATE_SUB(CURDATE(),INTERVAL 7 DAY) <= data GROUP BY gioco ORDER BY $order $az"));

// Tramite una semplice operazione matematica definisco il numero totale di pagine
$all_pages = ceil($all_rows / $x_pag);

// Calcolo da quale record iniziare
$first = ($pag - 1) * $x_pag;

// Recupero i record per la pagina corrente...
// utilizzando LIMIT per partire da $first e contare fino a $x_pag
$rs = mysql_query("SELECT noleggi.gioco AS ns, COUNT(*) AS class, giochi.nome AS gioco FROM noleggi INNER JOIN giochi ON giochi.numscaff = noleggi.gioco WHERE DATE_SUB(CURDATE(),INTERVAL 7 DAY) <= data GROUP BY gioco ORDER BY $order $az LIMIT $first, $x_pag");
$nr = mysql_num_rows($rs);
if ($nr != 0){

  for($x = 0; $x < $nr; $x++){
    $row = mysql_fetch_assoc($rs);
       
       
$id=$row['id'];
$nr = mysql_num_rows($rs);


?>
  <tr>
     <td><??></td>
     <td><?=$row['ns'];?></td>
   <td><?=$row['gioco']; ?></td>
   <td><?=$row['class']; ?></td>
  </tr>
   
<?php
}
}
?>
</table>


<div id="pgs">
<?php
if ($all_pages > 1){
  if ($pag > 1){
    echo "<a href=\"" . $_SERVER['PHP_SELF'] . "?id=".$id."&pag=" . ($pag - 1) . "\">";
    echo "<img src='img/left.png' alt=''></a>&nbsp;";
  }
  // faccio un ciclo di tutte le pagine
  for ($p=1; $p<=$all_pages; $p++) {
    // per la pagina corrente non mostro nessun link ma la evidenzio in blod
    // all'interno della sequenza delle pagine
    if ($p == $pag) echo "<b>" . $p . "</b>&nbsp;";
    // per tutte le altre pagine stampo il link
    else {
      echo "<a href=\"" . $_SERVER['PHP_SELF'] .  "?id=".$id."&pag=". $p . "\">";
      echo $p . "</a>&nbsp;";
    }
  }
  if ($all_pages > $pag){
    echo "<a href=\"" . $_SERVER['PHP_SELF'] .  "?id=".$id."&pag=" . ($pag + 1) . "\">";
    echo "<img src='img/right.png' alt=''></a>";
  }
}
?>
</body>

Chiedo scusa se non lo spezzetto, ma credo che visto nel suo insieme risulti più chiaro.
Richiamando la pagina 'statsett.php' la tabella viene visualizzata correttamente, in ordine decrescente per 'class' (ovvero il conteggio), ma se clicco sui link dei <th></th> non succede nulla, eccezion fatta per il <th>NOLEGGI</th> che me lo riordina in maniera crescente (ma non in decrescente).

Qualche anima pia che mi aiuta a capire dove sto sbagliando?
 
Ultima modifica:

RedWarrior

Nuovo Utente
17 Giu 2009
15
0
1
-.-' non si può bestemmiare vero? una giornata intera a guardarlo e riguardarlo per capire il problema e poi mi scordo un GET...
cmq ora funziona! Grazie mille Marino51!
 

RedWarrior

Nuovo Utente
17 Giu 2009
15
0
1
visto che ormai ci sono... sapreste suggerirmi un metodo per aggiungere al <tr></tr> relativo a <th>N°</n> la posizione in 'classifica'? Ovvero che mi restituisce una sorta di numero di righe risultante dal COUNT (non il totale, ma il numero riga)?
e ovviamente questo dovrebbe restare tale anche ordinando la tabella per nome o ns...
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
non so bene quanti elementi devi visualizzare nella tabella, ma hai valutato la possibilità di ordinare per ogni colonna ?
PHP:
    <script src="../js/jquery.min.js"></script>
    <script src="../js/jquery.tablesorter.js"></script>
    <script type="text/javascript">
    $(document).ready(function() { $("#OPTable").tablesorter(); });
    </script>


        <div class='OPTableDiv'>
          <table id="OPTable" class="tablesorter" border=4 cellpadding=4>
            <?php print $tabella; ?>
          </table>
        </div>
potresti crearti la tabella in php e poi demandare gli ordinamenti al click sul titolo della colonna
uso questa tecnica in diverse applicazioni e mi sono tolto il pensiero dell'ordine
in questo modo rendi più semplice la programmazione
e non devi ricaricare la pagina ad ogni ordinamento diverso
 

RedWarrior

Nuovo Utente
17 Giu 2009
15
0
1
Si, probabilmente hai ragione, infatti ti copio lo script per applicazioni future :D. Questo però non risolve il problema della colonna N. che in pratica deve visualizzare il posto del gioco in classifica, indipendentemente dall'ordinamento (p. es. Tetris è il quarto in classifica perché tramite il count(*) è venuto fuori che tre giochi sono stati noleggiati più volte di lui, quindi il numero nella colonna N di Tetris deve essere 4 anche se la tabella è ordinata per nome ASC e quindi è tra gli ultimi ad essere visualizzato). Spero di essermi spiegato.
 

RedWarrior

Nuovo Utente
17 Giu 2009
15
0
1
Ho risolto applicando lo script di marino51, che ringrazio nuovamente! (Ero un po' riluttante a modificare quanto avevo fatto, anche perché pensavo sarebbe stato più complicato adattare lo script al mio php... per fortuna mi sbagliavo)
 
Discussioni simili
Autore Titolo Forum Risposte Data
P Query Mysql con Join PHP 2
F [MySQL] Problema con LEFT JOIN MySQL 6
P [MySQL] Inner Join o Left Join MySQL 14
simgia [MySQL] INNER JOIN problema MySQL 0
C Php/Mysql query JOIN tra tabelle PHP 4
C Php/Mysql query JOIN tra due tabelle PHP 18
R [MySQL] SQL UPDATE INNER JOIN MySQL 5
G [MySQL] Join o select MySQL 1
ivarello JOIN Mysql PHP 2
R MySQL JOIN o UNION SELECT? (tabella vuota) MySQL 0
Monital [Mysql]Confronto tra tabelle ed inseirmento dati- Comando JOIN (Credo) MySQL 0
H Mysql - left join PHP 9
K form Inserimento record mysql PHP 2
P Mysql lento a cancellare MySQL 1
P Codifica caratteri speciali mysql php PHP 0
N MAX() + ADD_DATE - per update su Mysql MySQL 0
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
W MySQL ciclo in SELECT MySQL 0
L Mysql gestionale multipiattaforma MySQL 0
W MySQL SELECT list dinamica MySQL 0
M utilizzo mysql in nodejs - crea createdAt e updateAt MySQL 1
T colonne di tabelle mysql ordinate MySQL 0
M Sintassi "personalizzata" per mysql workbench? MySQL 0
A Mysql MySQL 0
F Ricreare struttura php+mysql su Xampp Apache 0
M Array associativi php su 2 campi mysql PHP 10
Z Controllo giorni MYSQL PHP 0
L php mysql non salva solo id PHP 21
L php mysql cerca e visualizza pagina PHP 0
L Mysql: Nascondere le pagine dopo una ricerca PHP 1
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
S problema con recupero dati tabella mysql PHP 2
E Progressbar estrazione dati da tabella mySQL Ajax 9
Z MySql injection PHP PHP 1
D controllare valore in tabella mysql PHP 0
A pulsante di update campo mysql con javascript Javascript 2
R Tutto su utf-8 ma ancora problemi con i caratteri speciali in mysql MySQL 1
T differenza fra mysql xampp e un mysql server Database 0
R Importazione csv su mysql tramite array PHP 2
Z Problema con INT MySQL PHP 1
Z Problema database MySQL con XAMPP PHP 0
D problema php mysql PHP 1
D problema php mysql PHP 1
N Server mysql non raggiungibile da connessione esterna MySQL 1
B Crea pdf da tabella mysql "ultima riga modificata" MySQL 4
D evitare di inserirre duplicati in mysql PHP 4
L salvare codice html in mysql PHP 3
L Google chart php mysql PHP 2

Discussioni simili