Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1420 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°432021
burgergold
5$? va chez l'diable!
Posté le 18-06-2003 à 16:18:13  profilanswer
 

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
mood
Publicité
Posté le 18-06-2003 à 16:18:13  profilanswer
 

n°432204
belgique
Posté le 18-06-2003 à 17:49:39  profilanswer
 

mysql_num_rows non?

n°432228
burgergold
5$? va chez l'diable!
Posté le 18-06-2003 à 18:10:18  profilanswer
 
n°432370
mrbebert
Posté le 18-06-2003 à 20:38:06  profilanswer
 

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

n°432409
burgergold
5$? va chez l'diable!
Posté le 18-06-2003 à 21:28:20  profilanswer
 
n°432428
mrbebert
Posté le 18-06-2003 à 21:46:22  profilanswer
 

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
n°432439
burgergold
5$? va chez l'diable!
Posté le 18-06-2003 à 21:53:25  profilanswer
 

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
n°432444
burgergold
5$? va chez l'diable!
Posté le 18-06-2003 à 21:58:35  profilanswer
 

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
n°432447
mrbebert
Posté le 18-06-2003 à 21:59:27  profilanswer
 

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
n°432456
burgergold
5$? va chez l'diable!
Posté le 18-06-2003 à 22:04:10  profilanswer
 

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
mood
Publicité
Posté le 18-06-2003 à 22:04:10  profilanswer
 

n°433193
burgergold
5$? va chez l'diable!
Posté le 19-06-2003 à 16:23:44  profilanswer
 

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
n°433294
belgique
Posté le 19-06-2003 à 17:44:03  profilanswer
 

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

n°433337
mrbebert
Posté le 19-06-2003 à 19:04:15  profilanswer
 

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
n°433343
burgergold
5$? va chez l'diable!
Posté le 19-06-2003 à 19:24:53  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
[PHP] plantage analyse d'un fichier log, fichier trop gros ? ! ?[ PHP et autre ] Les expressions régulières.
[PHP] Comment récupérer une valeur de parametre de l'url[PHP] indentation automatique
[Easy PHP] Simuler un temps de chargement..[PHP] Créer un user sous Linux via un mdp crypté, probleme...
[VBA excel] rouddown et nombres décimaux[PHP] Amélioration en rapidité d'un p'tit bout de code
[PHP] erreur lors du passage php -> html[PHP] Question facile : Comment lire un élément d'un tableau
Plus de sujets relatifs à : [PHP] Nombres de réponses d'une query


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR