Nombres de réponses d'une query [PHP] - PHP - Programmation
Marsh Posté le 18-06-2003 à 18:10:18
ReplyMarsh Posté le 18-06-2003 à 20:38:06
Si tu ne comptes pas parcourir le résultat, il vaut mieux faire un "SELECT count(*) as total FROM ...."
Comme ca, il te renvoie uniquement le nombre de lignes plutot que de manipuler une grosse quantité de données pour rien
Marsh Posté le 18-06-2003 à 21:28:20
ReplyMarsh Posté le 18-06-2003 à 21:46:22
Quoique, il y aurait encore plus efficace
En faisant un count(*), il te renvoie moins de données, mais doit tout de même parcourir les tables pour déterminer combien de lignes sont concernées
Le plus efficace serait donc de ne pas faire de count(*), mais plutot de rajouter un ' ... LIMIT 0, 1' à la fin de ta requête (je considère que tu utilise mysql )
En faisant ca, tu indiques au serveur de s'arrêter dès qu'il a trouvé une ligne qui convient à la requête. Il ne te reste plus qu'à vérifier si tu as 1 ligne ou pas dans ton résultat
Marsh Posté le 18-06-2003 à 21:53:25
mrBebert a écrit : Quoique, il y aurait encore plus efficace |
Marsh Posté le 18-06-2003 à 21:58:35
c judicieux d'utiliser la fonction mysql-free-result après une requête ou si c une perte de temps?
Marsh Posté le 18-06-2003 à 21:59:27
Bien entendu, il faudrait enlever le 'ORDER BY'
C'est inutile de lui demander de trier les lignes (ce qui l'oblige à tout lire, même avec un LIMIT 0, 1 ) si la seule chose qui t'intéresse est de tester l'existence d'un résultat
(promis, là, j'ai plus rien à dire )
edit concernant le mysql_free_result : dans tous les cas, les résultats sont effacés à la fin du script. Disons que c'est utile si as des résultats relativement gros. Si tu récupère juste quelques lignes, tu peux les "oublier", ca pose pas de problème
Marsh Posté le 18-06-2003 à 22:04:10
le order by est disparu depuis que j'ai mis le count, t'inquiète
j'ai dejà eu des classes de sql, mais ca date de bientot 2ans alors faut s'y remettre
Marsh Posté le 19-06-2003 à 16:23:44
hum jai comme un bleme la
Code :
|
mon fetch me retourne "array" alors que j'mattends à recevoir 0 ou 1...
Marsh Posté le 19-06-2003 à 19:04:15
burgergold a écrit : hum jai comme un bleme la
|
Tous les SELECT renvoient un résultat à parcourir avec mysql_fetch_array. Simplement, dans le cas de ta requête, il n'y a qu'une ligne et qu'une colonne
Je pense que cette colonne s'appelle 'count(*)', mais le plus simple, c'est de la renommer :
$menu_exist = mysql_query ("SELECT count(*) as total ... " );
$r = mysql_fetch_array($menu_exist);
$total = $r['total'];
Sinon, dans ta requête, ca ne sert à rien de mettre un LIMIT 0, 1 puisque le count(*) dans le select fait qu'il n'y aura qu'une seule ligne renvoyée
Marsh Posté le 19-06-2003 à 19:24:53
mrBebert a écrit : Tous les SELECT renvoient un résultat à parcourir avec mysql_fetch_array. Simplement, dans le cas de ta requête, il n'y a qu'une ligne et qu'une colonne |
ahhh javais pas bien lu qu'en utilisant le limit, on n'utilisait plus le count
Marsh Posté le 18-06-2003 à 16:18:13
ptite question fastoche
j'fais une requete que je place dans une variable
ya moyen de savoir si $submenu contient des éléments ou non sans utiliser un fetch array?
---------------
http://www.boincstats.com/signature/user_664861.gif