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
9
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