Mysql requette comment faire???

jordangj Messages postés 63 Date d'inscription lundi 12 juillet 2004 Statut Membre Dernière intervention 8 mai 2007 - 24 août 2004 à 22:38
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 - 28 août 2004 à 18:31
bonjour je vous explique mon pb
voici le code qui me permet de crée un tableau:

$result= mysql_query("select count(nb_visite) as somme,date from visiteur where idmb='$idmb' and date like '%".$moi_annee."' group by date order by date desc") or die ("erreur compte visite");
while($row=mysql_fetch_array($result)){
$couleur = choix_couleur($couleur1, $couleur2);
$sql="select sum(p.nb_visite) as somme from visiteur v, page p where idmb='$idmb' and v.date like '".$row[date]."' and v.code=p.code ";
$result1=mysql_query($sql) or die ("erreur compte pages vues");
$row2=mysql_fetch_array($result1);
echo "<tr>
<td align="center" bgcolor=".$couleur."> ".$row[date]." </td>
<td align ="center" bgcolor=".$couleur.">$row[somme]</td>
<td align="center" bgcolor=".$couleur.">$row2[somme]</td>
</tr>";
}

mon but est d'ordoner les resultats pas pages visitées avec la variable $row2[somme]
comment faire ???????
merci
GJ

6 réponses

cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
24 août 2004 à 23:52
1. Ne pas appeler un champ "date"
2. $row['somme'] (il faut mettre les ' ' car c'est du text !)
3. pour ce qui est d'ordonner, je ne vois pas très bien la, c'est plutot toufu ton code... je te conseil de faire qu'un SQL et d'ordonner ca. Sinon tu peux tout mettre dans un tableau et faire un sort() apres.

PHP Guru
Écoutez les conseils d'un vieux sage ! Ils sont souvent très utiles.
http://www.lookstrike.com
0
rekam Messages postés 122 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 10 mars 2011
25 août 2004 à 00:06
Salut!

Fais tout ça en 3 temps. D'abord tu récupères toutes les données et tu les stockes sous forme de tableaux (ou d'objets). Ensuite, tu tries ton tableau. Finalement tu reprends ton tableau et tu affiche.

ce qui donnerait qqch du genre (je saute volontairement quelques lignes de ton code) :

//Tu déclares un tableau comme ceci :
$data['date']= array();
$data['somme1'] = array();
$data['somme1'] = array();

$result = mysql_query(...);
while ($row = mysql_fetch_array($result)){
...
...
$result1 = mysql_query($sql);
$row2 = mysql_fetch_array($result1);

//Maintenant, au lieu de faire echo, tu sauvegardes tout ça dans le tableau.
$data['date'][] = $row['date'];
$data['somme1'][] = $row['somme']
$data['somme2'][] = $row2['somme']
}

//Ensuite, tu tries ton tableau $data comme tu le souhaites
array_multisort($data['somme2'], SORT_DESC, $data['somme1'], $data['date']);

//Puis tu affiches ta table
for ($i = 0; $i < count($data['somme1']); $i++){
echo "...";
}

Voilà, j'espère que ça t'aideras ! J'ai pas testé, alors si ça plante...c'est normal ;-). Et c'est vrai qu'il est mieux d'éviter d'appeler un champ de BD "date", ça créé des conflits, parfois. Pour les quotes également, faut pas les oublier, même si ça marche dès fois sans !
0
jordangj Messages postés 63 Date d'inscription lundi 12 juillet 2004 Statut Membre Dernière intervention 8 mai 2007
25 août 2004 à 21:40
Voici le code que j'ai modifier c nikel merci
le seul pb c'est que c'est vraiment long avant l'affichage.
peu on alégé la requette ??? ou ya t'il quelque chose que j'ai mal fait
merci
Jordan


//Tu déclares un tableau comme ceci :
$data['date']= array();
$data['somme1'] = array();
$data['somme2'] = array();

$result = mysql_query("select date from visiteur where idmb='$idmb' and date like '%".$moi_annee."'");
while ($row = mysql_fetch_array($result)){

$sql="select sum(p.nb_visite) as somme from visiteur v, page p where idmb='$idmb' and v.date like '".$row[date]."' and v.code=p.code ";
$result1 = mysql_query($sql);
$row2 = mysql_fetch_array($result1);

//Maintenant, au lieu de faire echo, tu sauvegardes tout ça dans le tableau.
$data['date'][] = $row['date'];
$data['somme1'][] = $row['somme'];
$data['somme2'][] = $row2['somme'];
}

//Ensuite, tu tries ton tableau $data comme tu le souhaites

array_multisort($data['date'], SORT_DESC, $data['somme1'], $data['somme2']);
}

//Puis tu affiches ta table
for ($i = 0; $i < count($data['somme1']); $i++){
echo "<tr>
<td align="center" bgcolor=".$couleur.">".$data['date'][$i]."
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
28 août 2004 à 13:29
Salut ;-)

Pour faire ça en une seule requête tu fais un left join :

(je n'ai pas testé, mais la syntaxe s'en rapproche) :

$requete=mysql_query("SELECT v.date,SUM(p.nb_visite) as somme FROM visiteur v LEFT JOIN page p ON v.idmb=p.idmd AND v.code=p.code WHERE idmb='$idmb' and date like '%".$moi_annee."'");

Tu n'as plus qu'à faire un fetch_row et c'est bon

a ++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jordangj Messages postés 63 Date d'inscription lundi 12 juillet 2004 Statut Membre Dernière intervention 8 mai 2007
28 août 2004 à 16:07
salut
ouia j'ai cherché et j'ai trouvé cette histoire de join.
mais est t'il possible de recupere mes trois varable sur 1 requette ???

$result = mysql_query("select date from visiteur where idmb='$idmb' and date like '%".$moi_annee."'");

$sql="select sum(p.nb_visite) as somme2 from visiteur v, page p where idmb='$idmb' and v.date like '".$row[date]."' and v.code=p.code ";

$row['date'];
$row['somme'];
$row2['somme'2];

voila
merci
GJ
0
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
28 août 2004 à 18:31
SELECT a.date,b.somme,b.somme2 WHERE xxx a, yyy b WHERE a.id=b.id AND b.code=4

exemple...

Change ton champ Date !

PHP Guru
Écoutez les conseils d'un vieux sage ! Ils sont souvent très utiles.
http://www.lookstrike.com
0
Rejoignez-nous