Aller au contenu

Tri d'une requête après un while


aodot

Sujets conseillés

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.

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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é par aodot
Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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 :lol:

Je continue mes recherches et je vous tiens au courant.

Encore merci.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...