24. Quants registres hi ha i quants en presento?
Índex
Comptar el nombre de registres
Sovint cal saber el nombre de registres d'una taula, sense necessitat de presentar-los exhaustivament. Això es fa amb COUNT(*):
- $regs = mysql_query("SELECT COUNT(*) as quantitat FROM taula",$con) or
- die("Problemes de lectura");
- $reg = mysql_fetch_array($regs);
- echo $reg['quantitat'];
Cal notar que
- La variable quantitat recull el valor del comptatge.
- En aquest cas no cal incloure mysql_fetxch_array() en un while() perquè la resposta té forçosament un sol element.
- Taula MySQL anomenada socis, amb els camps Id, Nom, Cognoms, Telefon i Correu.
- ...
- $regs = mysql_query("SELECT COUNT(*) as quantitat FROM socis",$con) or
- die("Problemes de lectura"); // Fem el recompte de registres de la taula socis
- $reg=mysql_fetch_array($regs);
- echo "<p>La taula té " . $reg['quantitat'] . " registres.</p>"; // Fem constar el resultat
- ...
Vegeu-ne el resultat.
Podem comptar el nombre de registres que compleixen una determinada condició tot combinant COUNT(*) i WHERE
Comptar grups de registres
Podem comptar el nombre de registres agrupant-los en grups que comparteixen el valor d'un camp; això s'aconsegueix amb l'ús conjunt de COUNT(*) i GROUP BY:
- $regs = mysql_query("SELECT camp, COUNT(*) as quantitat FROM taula GROUP BY
camp",$con)
Cal notar que
- La variable quantitat recull el valor del comptatge, com en el cas anterior.
- Als efectes del SELECT, camp i COUNT(*) són com dos camps, i s'han de separar amb una coma.
- Com que cada grup constituirà un element diferent, en aquest cas sí que cal incloure mysql_fetxch_array() en un while(), com es veu en l'exemple següent.
- Taula MySQL anomenada socis, amb els camps Id, Nom, Cognoms, Telefon i Correu.
- $regs = mysql_query("SELECT Cognoms, COUNT(*) as quantitat FROM socis GROUP BY
Cognoms",$con) or
- die("Problemes de lectura"); // Agrupem per cognom i comptem els registres de cada grup
- while($reg = mysql_fetch_array($regs)){
- echo $reg['Cognoms'] . ": " . $reg['quantitat'] . "<br />"; // Fem constar el resultat
- }
Vegeu-ne el resultat.
Limitar el nombre de registres presentats
Si el conjunt format en fer una recerca és molt gran, es pot subdividir en blocs de registres. N'hi ha prou d'afegir el controlador LIMIT
- $resultat = mysql_query("SELECT ... LIMIT registre_inicial,nombre_de_registres")
Cal advertir que la numeració dels registres comença per 0.
- Taula MySQL anomenada socis, amb els camps Id, Nom, Cognoms, Telefon i Correu.
- Document HTML dotat d'un formulari en què es demana el registre inicial i el nombre de registres desitjats.
- $inicial = $_POST['ini'] - 1; // Recepció de l'especificació del registre inicial
- $quants = $_POST['num']; // Recepció de l'especificació del nombre de registres per bloc
- ...
- $dades = mysql_query("SELECT * FROM socis ORDER BY Cognoms LIMIT $inicial,
$quants") or
- die("Problemes de lectura"); // Recerca segons els paràmetres especificats
- while($fila = mysql_fetch_array($dades)){
- echo "<tr>";
- echo "<td class='e'>" . $fila['Id'] . "</td>"; // Presentació de les dades
- echo "<td class='e'>" . $fila['Nom'] . "</td>";
- echo "<td class='e'>" . $fila['Cognoms'] . "</td>";
- echo "<td class='e'>" . $fila['Telefon'] . "</td>";
- echo "<td class='e'>" . $fila['Correu'] . "</td>";
- echo "</tr>";
- }
Vegeu-ne el resultat.
Moltes vegades el nombre de registres per bloc queda fixat en el programa, i accedim a cada bloc mitjançant uns enllaços numerats que es presenten en tot moment . El procediment és força senzill: primer determinem el nombre de registres; després, el nombre de blocs que hi corresponen, i, finalment, creem tants enllaços numerats com calguin: cada enllaç numerat recarrega el document PHP amb la indicació del número de registre inicial.