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

  FORUM HardWare.fr
  Programmation
  PHP

  selectionner les enregistrements et les compter

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

selectionner les enregistrements et les compter

n°1898497
jerrry
Posté le 23-06-2009 à 23:55:42  profilanswer
 

bonjour,
 
je cherche à compter le nombre d'enregistrements et faire une
action différente pour une partie d'entre eux,
le probleme c'est que jarrive bien à les compter mais pas à recuperer les informations
 
voici mon code
 
$query = "SELECT count(*) FROM images WHERE categorie = ".$categorie." ORDER BY ID ";
$result = mysql_query($query)or die(mysql_error());
 
$resultat=mysql_fetch_row($result);
 
echo $resultat[0]; // j'affiche le nombre d'enregistrement  
 
$max= $resultat[0]-1; // je limite le traitement à $resultat[0]-1
 
 for($i=0;$i < $max;$i++)
     {
           echo $i.'<br />'.$resultat[0];
 echo $resultat[1];            // la je devrais recuperer QQ chose mais rien n'apparait
     }  
 
merci de votre aide
 

mood
Publicité
Posté le 23-06-2009 à 23:55:42  profilanswer
 

n°1898526
Deamon
Posté le 24-06-2009 à 08:21:34  profilanswer
 

Il est censé avoir quoi pour toi dans $resultat[1] ?
Car ta requête ne retourne que le nombre d'enregistrements c'est tout.

n°1898569
NewsletTux
&lt;Insérez ici votre vie /&gt;
Posté le 24-06-2009 à 10:09:37  profilanswer
 

si tu as bcp d'enregistrements, est-ce que ça vaut vraiment le coup de faire un COUNT(*) ? (je parle en terme d'optimisation).


---------------
NewsletTux - outil de mailing list en PHP MySQL
n°1898579
rufo
Pas me confondre avec Lycos!
Posté le 24-06-2009 à 10:51:34  profilanswer
 

un SELECT COUNT(ID) serait plus efficace déjà! Et pareil, dans $resultat[1], tu espères avoir quoi :??:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1898582
pataluc
Posté le 24-06-2009 à 10:57:20  profilanswer
 

rufo a écrit :

un SELECT COUNT(ID) serait plus efficace déjà! Et pareil, dans $resultat[1], tu espères avoir quoi :??:


dans la même idée, le order dans un count il sert juste à manger du cpu.

n°1898591
rufo
Pas me confondre avec Lycos!
Posté le 24-06-2009 à 11:12:56  profilanswer
 

tout à fait (j'avais lu GROUP BY au lieu d'ORDER BY)... :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1898664
jerrry
Posté le 24-06-2009 à 14:31:44  profilanswer
 

dans echo resultat[1] je veux afficher le contenu du champs 1 (qui s'appelle categorie aussi) de la table image
 
y a t'il un moyen de tout faire en une seule requete sql pour  
selectionner les enregistrements
les compter
les afficher  
 
merci!

n°1898667
rufo
Pas me confondre avec Lycos!
Posté le 24-06-2009 à 14:39:36  profilanswer
 

déjà, tu nous montrerais le schéma de ta BD + nous dirais précisément ce que tu veux faire, ensuite on pourrai te répondre... :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1898668
macgawel
Posté le 24-06-2009 à 14:40:44  profilanswer
 

jerrry a écrit :

dans echo resultat[1] je veux afficher le contenu du champs 1 (qui s'appelle categorie aussi) de la table image
 
y a t'il un moyen de tout faire en une seule requete sql pour  
selectionner les enregistrements
les compter
les afficher  
 
merci!


[:sh@rdar]
1. Tu fais une requête qui sélectionne ce qui t'intéresse.
2. Tu utilises la fonction qui va bien pour compter le nombre d'enregistrements retournés.
3. Tu boucles sur un fetch pour l'affichage.

n°1898683
pataluc
Posté le 24-06-2009 à 15:00:35  profilanswer
 

a vue de nez, je dirais: tu vire le count, comme ca la requete ramene les champ, et le count, tu le fais en php (fonction mysql_num_rows je crois).

 


Edit: Grillaid de 20 minutes. Ca m'apprendra à rédiger un msg et revenir le valider 20mn plus tard. :D

Message cité 1 fois
Message édité par pataluc le 24-06-2009 à 15:01:18
mood
Publicité
Posté le 24-06-2009 à 15:00:35  profilanswer
 

n°1898931
jerrry
Posté le 24-06-2009 à 22:55:13  profilanswer
 

bon je reviens vers vous car la deuxième partie du script l'affichage différents (selon le nombre total d'enregistrement-1 (attention ce nombre total d'enregistrement varie, donc un select avec LIMIT semble exclu)) mais qui sait?
je pencherait plutot pour une boucle dans une boucler sans savoir vraiment comment faire.
 
en clair tous les affichages des valeurs sont les mêmes sauf le dernier
qui doit être différent ,
j'ai ceci mais c'est un peu euh... (merdique?)
 
le but du script faire un marcher un carousel d'images dynamiques il est en javascript j'insere par php des variables dans un tableau,
le script ici bas est volontairement parcellaire le but comprendre l'
affichage conditionnel
 
 
la table images contient X enregistrements
Les X-1 ers enregistrement doivent etre affiche et un ";"doit etre inserer
le dernier affichage ne contient pas de ";"  (point virgule) à la fin
 
 
$query = "SELECT * FROM images WHERE categorie = ".$categorie."  ";
$result = mysql_query($query)or die(mysql_error());
$nombre_rows = mysql_num_rows($result);
 
 
 
echo $nombre_rows; // affichage du résultat
 
$max= $nombre_rows-1;
 
  echo $max;
   echo '<br/>';
  echo '<table>';
$row = mysql_fetch_array($result);
   echo '<tr>';
 $i=0;
       while($i < $max)
     {
          echo $row['image'].';';
     $i++;
     }  
 
      echo $i;
 
merci de votre aide

n°1899146
pataluc
Posté le 25-06-2009 à 13:22:49  profilanswer
 

c pas hyper sexy ce que tu fais. vu que tu connais la taille du tableau, fais une boucle for, ou alors, utilise un while classique de lecture de résultat:

Code :
  1. while($row = mysql_fetch_array($result)){
  2.    ...
  3. }


mais sinon, ca me semble pas tout mal... à part peut être d'éviter de ramener * alors que tu n'utilise qu'un seul champ. (select image au lieu de select *)


Message édité par pataluc le 25-06-2009 à 13:24:18
n°1899193
rufo
Pas me confondre avec Lycos!
Posté le 25-06-2009 à 15:20:43  profilanswer
 

c'est normal que t'affiche toujours la même image :??: Par ce que le $row est récupéré en dehors de la boucle là...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1899285
NewsletTux
&lt;Insérez ici votre vie /&gt;
Posté le 25-06-2009 à 20:43:55  profilanswer
 

pataluc a écrit :

a vue de nez, je dirais: tu vire le count, comme ca la requete ramene les champ, et le count, tu le fais en php (fonction mysql_num_rows je crois).
 
 
Edit: Grillaid de 20 minutes. Ca m'apprendra à rédiger un msg et revenir le valider 20mn plus tard. :D


 
oui et non. Si ton tableau PHP ne fait qu'une 100 aine de lignes avec un seul champ, "ça va", mais s'il récupère 250 lignes MySQL avec 15 champs pour chacune, et qu'il soit sur un vieux mutualisé, bonjour la conso de RAM ... Et vive les memory exceeds size machin ...


---------------
NewsletTux - outil de mailing list en PHP MySQL
n°1899293
jerrry
Posté le 25-06-2009 à 21:55:01  profilanswer
 

j'ai un peu avancé
remis tout dans une boucle while mais j'ai un problème, regardez en bas
la boucle d'affiche j'ai deux fois le dernier enregistrement une fois avec virgule, une fois sans (!?)
 
rappel la table images contient X enregistrements
Les X-1 ers enregistrement doivent etre affiche et une "," virgule doit être inserée
le dernier affichage ne contient pas de ","  ( virgule) à la fin
 
je selectionne tous les enregistrements d'une catégorie, ici j'ai 6 enregistrements,( ce nombre varie selon les catégories)
 
les 5 premiers enregistrement doivent etre affichés et une virgule ajoutée
le dernier ne doit pas avoir de virgule apres lui
 
 
 
 
 
j'ai maintenant ceci
$query = "SELECT * FROM images WHERE categorie = ".$categorie."  ";
$result = mysql_query($query)or die(mysql_error());
$nombre_rows = mysql_num_rows($result);
/* echo $nombre_rows; // affichage du résultat */
 
$max= $nombre_rows-1;
  echo $max;
   echo '<br/>';
     
  while($row = mysql_fetch_array($result))
 
  {  
 for($i=0;$i<$max;$i++){
$image= $row['id'].'.jpg';
$titre= $row['titre'];
$maVar = '{url: "'.$image.'", title: "'.$titre.'"},';
 
 }
 echo     $maVar;
 echo'<br/>';
}
$maVar = substr($maVar, 0, -1); // on vire la dernière virgule
 echo     $maVar;
 
qui donne cela:
5
{url: "26.jpg", title: "fff"},
{url: "27.jpg", title: "titre de la sculpture"},
{url: "28.jpg", title: "autre titre"},
{url: "34.jpg", title: "testitre"},
{url: "35.jpg", title: "testitre autre"},
{url: "36.jpg", title: "test titre autre autre"}, // ceci est en trop!?
{url: "36.jpg", title: "test titre autre autre"}
 
 
merci de vos idées constructives!

n°1899304
pataluc
Posté le 25-06-2009 à 23:29:41  profilanswer
 

NewsletTux a écrit :


 
oui et non. Si ton tableau PHP ne fait qu'une 100 aine de lignes avec un seul champ, "ça va", mais s'il récupère 250 lignes MySQL avec 15 champs pour chacune, et qu'il soit sur un vieux mutualisé, bonjour la conso de RAM ... Et vive les memory exceeds size machin ...


j'ai pas dit de ramener les 15 champs... et s'il veut pouvoir afficher les éléments il faut bien en ramener au moins 1. et derrière il fait un mysql_num_rows.

n°1899305
pataluc
Posté le 25-06-2009 à 23:37:06  profilanswer
 

jerrry a écrit :

j'ai un peu avancé ...


euh... pourquoi t'as imbriqué le for dans le while? sauf si j'y vois plus clair, c'est ca qui te fout la merde. c'est l'un ou l'autre. d'ailleurs dans ton for tu utilise même pas le $i que tu déclare. vire-le.
 
et ca le fait 2 fois parce qu'apres avoir parcouru tout tes résultat, tu refait un echo $mavar.
 
tu devrais revoir un peu boucles, et repenser le truc a partir de ton besoin original, parce que la ton code il est [:yopyopyop]
 
 
et sinon, tu seras gentil d'utiliser les balises [code] quand tu poste http://forum-images.hardware.fr/icones/message/c.gif, histoire de rendre le truc un peu plus lisible. merci.

n°1899316
NewsletTux
&lt;Insérez ici votre vie /&gt;
Posté le 26-06-2009 à 01:00:41  profilanswer
 

pataluc a écrit :


j'ai pas dit de ramener les 15 champs... et s'il veut pouvoir afficher les éléments il faut bien en ramener au moins 1. et derrière il fait un mysql_num_rows.


tout à fait, mais je voulais juste mettre en lumlière que ton raisonnement, si logique soit-il, peut avoir des limites ... (j'en ai fait les frais sur un serveur free.Fr, sans m'en rendre compte une fois, avec un tableau à 6 champs ...)


---------------
NewsletTux - outil de mailing list en PHP MySQL
n°1899367
jerrry
Posté le 26-06-2009 à 10:51:52  profilanswer
 

:cry:  
 

Code :
  1. while($row = mysql_fetch_array($result))
  2.  
  3.   {
  4. $image= $row['id'].'.jpg';
  5. $titre= $row['titre'];
  6. $maVar = '{url: "'.$image.'", title: "'.$titre.'"},';
  7.   echo     $maVar;
  8. echo'<br/>';
  9. echo'<br/>';
  10. }
  11. $maVar = substr($maVar, 0, -1); // on vire la dernière virgule  
  12. echo     $maVar;

 
 
j'ai deux echo car je veux d'abord afficher les premiers affichage avec une virgule à la fin
puis afficher le code de la derniere image sans la virgule
maintenant que j'ai viré le for j'ai le code est peut etre plus sexy le resultat
est le meme
 
 
{url: "26.jpg", title: "fff"},
 
{url: "27.jpg", title: "titre de la sculpture"},
 
{url: "28.jpg", title: "autre titre"},
 
{url: "34.jpg", title: "testitre"},
 
{url: "35.jpg", title: "testitre autre"},
 
{url: "36.jpg", title: "test titre autre autre"}, // comment puis je ne pas l'afficher?
 
{url: "36.jpg", title: "test titre autre autre"}  
 
merci

n°1899371
Deamon
Posté le 26-06-2009 à 10:58:42  profilanswer
 

T'es sur que c'est pas dans ta BDD que tu as deux fois le 36 ?

n°1899375
pataluc
Posté le 26-06-2009 à 11:09:58  profilanswer
 

Deamon a écrit :

T'es sur que c'est pas dans ta BDD que tu as deux fois le 36 ?


ben non regarde son code, il fait un echo dans la boucle while, puis encore un echo après la boucle... normal, ca répète le dernier élément.

n°1899377
pataluc
Posté le 26-06-2009 à 11:16:04  profilanswer
 

jerrry a écrit :

j'ai deux echo car je veux d'abord afficher les premiers affichage avec une virgule à la fin
puis afficher le code de la derniere image sans la virgule

tu aurais pu le dire plus tôt...
 
voila ce que je te propose (pas testé, mais ca doit pas être loin de ce qu'il te faut):

Code :
  1. $nbligne = mysql_num_rows($result);
  2. $i = 0;
  3. while($row = mysql_fetch_array($result))
  4. {
  5.     $image= $row['id'].'.jpg';
  6.     $titre= $row['titre'];
  7.     echo '{url: "'.$image.'", title: "'.$titre.'"}';
  8.     if ($i++ < $ngligne - 2) echo ',';
  9.     echo'<br/><br/>';
  10. }


n°1899386
Deamon
Posté le 26-06-2009 à 11:26:24  profilanswer
 

pataluc a écrit :


ben non regarde son code, il fait un echo dans la boucle while, puis encore un echo après la boucle... normal, ca répète le dernier élément.


 [:ddr555]  
Bon on va dire que j'ai rien dit alors.

n°1899390
pataluc
Posté le 26-06-2009 à 11:28:12  profilanswer
 

Deamon a écrit :


 [:ddr555]
Bon on va dire que j'ai rien dit alors.

 


c'est vendredaï. :D


Message édité par pataluc le 26-06-2009 à 11:28:22
n°1899427
jerrry
Posté le 26-06-2009 à 12:33:21  profilanswer
 

merci

mood
Publicité
Posté le   profilanswer
 


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

  selectionner les enregistrements et les compter

 

Sujets relatifs
compter les dates (sans les doublons) par REF.selectionner une feuiller excel en vba
Compter le nombre d'arguments en batchCompter les occurences d'un tableau
Sélectionner un repertoire via un browsercompter le nombre de meme mot dans un .txt
Ajout de donnée sélectionner dans un tableauCompter le temps passé sur un site
Compter le nombre de fichiers de la forme file*.txt en vbscript[word] Compter les lignes d'une page, savoir si une image est présente
Plus de sujets relatifs à : selectionner les enregistrements et les compter


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