[PHP] Nombres de réponses d'une query

Nombres de réponses d'une query [PHP] - PHP - Programmation

Marsh Posté le 18-06-2003 à 16:18:13    

ptite question fastoche :D
 
j'fais une requete que je place dans une variable
 

Code :
  1. $query = $query = "SELECT * FROM t_menu WHERE menu_subid = " . $menu_data['menu_id'] . " AND menu_visible = 1 ORDER BY menu_position";
  2.    $submenu = mysql_query ($query) or die ("Requête invalide" );


 
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
Reply

Marsh Posté le 18-06-2003 à 16:18:13   

Reply

Marsh Posté le 18-06-2003 à 17:49:39    

mysql_num_rows non?

Reply

Marsh Posté le 18-06-2003 à 18:10:18    

Reply

Marsh 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 :)

Reply

Marsh Posté le 18-06-2003 à 21:28:20    

Reply

Marsh Posté le 18-06-2003 à 21:46:22    

Quoique, il y aurait encore plus efficace [:figti]  
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 :o )
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 :)


Message édité par mrbebert le 18-06-2003 à 21:47:23
Reply

Marsh Posté le 18-06-2003 à 21:53:25    

mrBebert a écrit :

Quoique, il y aurait encore plus efficace [:figti]  
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 :o )
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 :)


 
 :jap:  :jap:  :jap:  
 
 :lol:


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

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?


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 18-06-2003 à 21:59:27    

Bien entendu, il faudrait enlever le 'ORDER BY' :o  
C'est inutile de lui demander de trier les lignes (ce qui l'oblige à tout lire, même avec un LIMIT 0, 1 [:proy] ) si la seule chose qui t'intéresse est de tester l'existence d'un résultat :)  
 
(promis, là, j'ai plus rien à dire :D )
 
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 :whistle:


Message édité par mrbebert le 18-06-2003 à 22:02:01
Reply

Marsh Posté le 18-06-2003 à 22:04:10    

le order by est disparu depuis que j'ai mis le count, t'inquiète :D
 
j'ai dejà eu des classes de sql, mais ca date de bientot 2ans alors :D faut s'y remettre


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 18-06-2003 à 22:04:10   

Reply

Marsh Posté le 19-06-2003 à 16:23:44    

hum jai comme un bleme la
 

Code :
  1. $query = "SELECT count(*) AS TOTAL FROM t_menu WHERE menu_subID = " . $_POST['subid'] . " AND menu_title = \"" . $_POST['title'] . "\" LIMIT 0, 1";
  2.       $menu_exist = mysql_query ($query) or die ("Requête invalide" );
  3.       print mysql_fetch_array($menu_exist);


 
mon fetch me retourne "array" alors que j'mattends à recevoir 0 ou 1...


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 19-06-2003 à 17:44:03    

ben oui, si tu fais un fetcharray, tu as un array...

Reply

Marsh Posté le 19-06-2003 à 19:04:15    

burgergold a écrit :

hum jai comme un bleme la
 

Code :
  1. $query = "SELECT count(*) AS TOTAL FROM t_menu WHERE menu_subID = " . $_POST['subid'] . " AND menu_title = \"" . $_POST['title'] . "\" LIMIT 0, 1";
  2.       $menu_exist = mysql_query ($query) or die ("Requête invalide" );
  3.       print mysql_fetch_array($menu_exist);


 
mon fetch me retourne "array" alors que j'mattends à recevoir 0 ou 1...

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 :D  
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 [:proy]


Message édité par mrbebert le 19-06-2003 à 19:04:53
Reply

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 :D  
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 [:proy]


 
ahhh javais pas bien lu qu'en utilisant le limit, on n'utilisait plus le count


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed