selectionner les enregistrements et les compter - PHP - Programmation
Marsh Posté le 24-06-2009 à 08:21:34
Il est censé avoir quoi pour toi dans $resultat[1] ?
Car ta requête ne retourne que le nombre d'enregistrements c'est tout.
Marsh Posté le 24-06-2009 à 10:09:37
si tu as bcp d'enregistrements, est-ce que ça vaut vraiment le coup de faire un COUNT(*) ? (je parle en terme d'optimisation).
Marsh Posté le 24-06-2009 à 10:51:34
un SELECT COUNT(ID) serait plus efficace déjà! Et pareil, dans $resultat[1], tu espères avoir quoi
Marsh Posté le 24-06-2009 à 10:57:20
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.
Marsh Posté le 24-06-2009 à 11:12:56
tout à fait (j'avais lu GROUP BY au lieu d'ORDER BY)...
Marsh Posté le 24-06-2009 à 14:31:44
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!
Marsh Posté le 24-06-2009 à 14:39:36
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...
Marsh Posté le 24-06-2009 à 14:40:44
jerrry a écrit : dans echo resultat[1] je veux afficher le contenu du champs 1 (qui s'appelle categorie aussi) de la table image |
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.
Marsh Posté le 24-06-2009 à 15:00:35
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.
Marsh Posté le 24-06-2009 à 22:55:13
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
Marsh Posté le 25-06-2009 à 13:22:49
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 :
|
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 *)
Marsh Posté le 25-06-2009 à 15:20:43
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à...
Marsh Posté le 25-06-2009 à 20:43:55
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). |
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 ...
Marsh Posté le 25-06-2009 à 21:55:01
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!
Marsh Posté le 25-06-2009 à 23:29:41
NewsletTux 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.
Marsh Posté le 25-06-2009 à 23:37:06
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
et sinon, tu seras gentil d'utiliser les balises [code] quand tu poste , histoire de rendre le truc un peu plus lisible. merci.
Marsh Posté le 26-06-2009 à 01:00:41
pataluc a écrit : |
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 ...)
Marsh Posté le 26-06-2009 à 10:51:52
Code :
|
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
Marsh Posté le 26-06-2009 à 10:58:42
ReplyMarsh Posté le 26-06-2009 à 11:09:58
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.
Marsh Posté le 26-06-2009 à 11:16:04
jerrry a écrit : j'ai deux echo car je veux d'abord afficher les premiers affichage avec une virgule à la fin |
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 :
|
Marsh Posté le 26-06-2009 à 11:26:24
pataluc a écrit : |
Bon on va dire que j'ai rien dit alors.
Marsh Posté le 26-06-2009 à 11:28:12
Deamon a écrit :
|
c'est vendredaï.
Marsh Posté le 23-06-2009 à 23:55:42
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