aodot Posté 7 Septembre 2007 Posté 7 Septembre 2007 Bonjour, Décidement je suis beaucoup sur le groupe en ce moment... J'ai un petit soucis de tri après un while. Cela paraît simple mais c'est plus compliqué que ça n'y parait. Je vais essayer de voux expliquer. J'ai déjà créé quelques sites Internet. J'aimerais me créer une page qui récupére les visites du mois de chaque site et les classer. Donc j'arrive bien à lister les visites de chaques sites mais le problèmes c'est de les trier. Voici ma requête qui affiche les sites order alphabétique : <?php$select = "SELECT count(id) FROM ref WHERE encours='Terminé' ";$result = mysql_query($select) or die ('Erreur : '.mysql_error() );$row = mysql_fetch_row($result);$total = $row[0];$select = "select * FROM ref WHERE encours='Terminé' ORDER BY titre ";$result = mysql_query($select) or die ('Erreur : '.mysql_error() );if($total) {$i='1';while ($donnees = mysql_fetch_array($result) ){echo "$i. ";$mois = date ("m");$annee = date ("Y");$host = "XXXXXX";$user = "XXXXXXX";$pass = "XXXXXXX";$db = "$donnees[bdd]";mysql_connect($host,$user,$pass);mysql_select_db($db);$select1 = "SELECT count(id) FROM visite WHERE mois='$mois' AND annee='$annee' ";$result1 = mysql_query($select1) or die ('Erreur : '.mysql_error() );$row1 = mysql_fetch_row($result1);$total1 = $row1[0];?><a href="<?PHP echo "$donnees[lien]" ?>" class="lien_blanc" target="_blank"><?PHP echo "$donnees[titre]" ?></a><?PHP echo " ($total1)" ?><?$i=$i+1;}}else echo 'Pas de site pour le moment.';mysql_free_result($result);?> Avez vous une petite piste ? Car pour les problèmes les plus compliqués google n'est pas mon ami lol. Où je tape peut etre les mauvais mots. Merci par avance.
aodot Posté 11 Septembre 2007 Auteur Posté 11 Septembre 2007 Bonjour, Merci pour votre réponse. Désolé de ne pas y avoir répondu plus rapidement mais la famille prend beaucoup de temps ;-) Changer le ORDER BY ? Je ne comprends pas trop. Si je fais order By id cela ne tri pas. en fait il faudrait trier par nombre total de visite par count(id) en fait. Mais comment lui indiquer.... Auriez vous une piste ? Merci par avance.
aodot Posté 11 Septembre 2007 Auteur Posté 11 Septembre 2007 (modifié) Re bonjour, J'ai de nouveau cherché et j'ai testé cela : $select1 = "SELECT id,count(*) AS nb_id FROM visite WHERE mois='$mois' AND annee='$annee' GROUP BY id ORDER BY nb_id DESC "; mais le tri ne se fait pas et les nombre sont incorectes. Je continue mes recherches. Modifié 11 Septembre 2007 par aodot
iNCiTE Web Posté 12 Septembre 2007 Posté 12 Septembre 2007 Et bien tu le fais trier en fonction de la somme des count : $select = "select COUNT(id) AS total FROM ref WHERE encours='Terminé' ORDER BY total,titre" Et en changeant : echo $total1; par echo $total; (ORDER BY total DESC,titre si tu veux les plus grands d'abord) Mais je ne sais pas trop comment sont des tables, 3 requêtes me paraissent beaucoup pour faire ça.
aodot Posté 12 Septembre 2007 Auteur Posté 12 Septembre 2007 Bonjour, Merci pour votre réponse mais je ne pense m'être bien expliqué. En fait mes sites sont dans une table REF (titre, lien etc.) et mes visites sont dans une TABLE visites (jour, mois, annee,id_ref). En fait je désire trier les sites qui sont dans REF par les nombres de visites du mois en cours qui sont dans VISITES. Donc en gros on sélectionne dans REF tous les sites où encours=Terminé et je veux trier le résultat de cette requête par le nombre de visites du mois de chaques sites. Exemple : Mes requêtes me donne : 1. site 1 200 visites 2. site3 4000 visitess 3.site5 300 visites alors que je voudrais : 1. site3 4000 visites 2. site5 300 visites 3. site1 200 visites Ca parait simple mais qu'est ce que c'est complqiuer de s'expliquer Je continue mes recherches et je vous tiens au courant. Encore merci.
marcb Posté 12 Septembre 2007 Posté 12 Septembre 2007 Bonjour, A vue de nez, je dirai que "SELECT id,count(*) AS nb_id FROM visite WHERE mois='$mois' AND annee='$annee' GROUP BY id ORDER BY nb_id DESC "; est tout à fait correct. Mais tu l'as déjà testé... As-tu testé directement dans phpmyadmin pour être certain que le problème vient de la requête et non du code php autour ? Enfin, pour qu'on puisse tester, peux-tu nous envoyer un export de ta table (30 lignes suffiront) ? M
zola2 Posté 13 Septembre 2007 Posté 13 Septembre 2007 A mon avis une simple jointure doit suffir, peux tu me donner la structure de tes tables et le champ qui sert de relation entre ces deux tables ?
aodot Posté 14 Septembre 2007 Auteur Posté 14 Septembre 2007 Bonjour, Merci pour votre réponse. Voici les tables (en gros) : Table REF : id | titre | encours | lien | bdd Table visite (pour chaque site) : id | timestamp En clair, pour chaque site presents dans REF on se connecte à sa base de données qui compte toutes les visites du mois dans la table VISITE. Est ce faisable ? Merci par avance.
Portekoi Posté 14 Septembre 2007 Posté 14 Septembre 2007 Select count(b.id) as nb_viste, Titre, Lien, a.id from Ref a inner join visite b on a.id = b.id group by Titre, Lien, a.id Order by a.id, nb_visite desc
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant