Page 1 sur 1

Problème avec SELECT et ORDER

Posté : 26 déc. 2006, 17:10
par mike1155
Bonjour, tout d'abord Bonnes Fêtes à tous et toutes :wink:

Voici mon problème, j'ai une bd

Code : Tout sélectionner

id forum sujet date forum auteur 120 2 contribution ? parrainage ? 2006-12-26 14:40:25 2 mike 120 2 contribution ? parrainage ? 2006-12-26 14:38:27 2 mike 120 2 contribution ? parrainage ? 2006-12-26 14:35:09 2 pinckyu 120 2 contribution ? parrainage ? 2006-12-26 14:27:38 2 pinckyu 119 2 Nouvelle version du site: v2.0.beta 2006-12-20 09:06:22 2 mike 118 1 Problème de classement 2006-12-18 19:20:41 1 walgraef 118 1 Problème de classement 2006-12-18 18:27:17 1 mike 118 1 Problème de classement 2006-12-18 16:17:26 1 walgraef 115 1 classement aft inférieur à celui de tennis calcult... 2006-12-08 19:54:06 1 mike 117 3 Classements 2007: ce n\'est pas terminé 2006-12-04 09:39:34 3 mike
Je cherche à grouper les id en trouvant le dernier auteur et la date et en classant tout cela du plus récent au plus ancien

Donc, je voudrais
120 2006-12-26 14:40:25 mike
119 2006-12-20 09:06:22 mike
118 2006-12-18 19:20:41 walgraef
...etc

J'ai tenté ceci

Code : Tout sélectionner

SELECT id,forum,sujet,date,forum,auteur FROM forum GROUP BY id ORDER BY date DESC LIMIT 0,10
Mais malheureusemnt, je retrouve bien mes 10 derniers sujets, classés du plus récent au plus ancien mais je retrouve le premier auteur du sujet alors que je voudrais le dernier... :(
Le problème est dans le GROUP BY...

Existe-t-il une commande qui permettrait d'obtenir cela tout de suite?

Merci

Posté : 26 déc. 2006, 17:29
par ouckileou
à vue de nez, un HAVING avec peut-être un MAX() sur la date

Posté : 26 déc. 2006, 18:31
par mike1155
Voilà une solution qui fonctionne mais j'aurais aimé trouver cela à l'aide d'une seule requête :(
$sql="SELECT id,forum,sujet,auteur,date,MAX(date) as maxi FROM forum GROUP BY id ORDER BY date DESC LIMIT 0,10";
     $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     while($data=mysql_fetch_array($req))
     {
     extract($data);
     $sql2="SELECT auteur as auteur2 FROM forum WHERE id='$id' and date='$maxi'";
     $req2 = mysql_query($sql2) or die('Erreur SQL !<br>'.$sql2.'<br>'.mysql_error());
     $data2=mysql_fetch_array($req2);
     extract($data2);
     $sujet=stripslashes($sujet);$date=$maxi;
     echo "<b>".ucfirst($sujet)."</b><br />$auteur2<br />le ".$date
     ."<br /><br />";
     }
Si quelqu'un a une solution, je suis preneur...

PS: J'ai testé mais sans succès le HAVING....je ne suis pas assez à l'aise avec cette fonction

Posté : 26 déc. 2006, 18:44
par ouckileou
"Le HAVING est au GROUP BY ce que le WHERE est au SELECT"

Qu'est-ce que tu as essayé ? Tu n'es peut-être pas très loin, il doit y avoir moyen d'obtenir ça en une requête.

Posté : 26 déc. 2006, 18:49
par mike1155
"Le HAVING est au GROUP BY ce que le WHERE est au SELECT"

Qu'est-ce que tu as essayé ? Tu n'es peut-être pas très loin, il doit y avoir moyen d'obtenir ça en une requête.
Rien de bien satisfaisant, que des erreurs :-(
SELECT id,forum,sujet,auteur,date,MAX(date) as maxi FROM forum GROUP BY id HAVING date=maxi ORDER BY date DESC LIMIT 0,10

Posté : 26 déc. 2006, 18:53
par Hubert Roksor
mike1155, la balise [quote] sert à faire des citations, si tu postes du code, merci d'utiliser

Code : Tout sélectionner

ou [php]. HAVING n'aidera pas vraiment, en fait il faudrait faire une jointure sur une table dérivée mais la requête serait relativement compliquée et assez inefficace. Il faudrait impérativement que tu revois la structure de tes données, je n'ai pas de liens sous la main mais fais une recherche sur "normalisation" sur les forums, tu devrais trouver pas mal d'infos. Sinon, installe phpBB.

Posté : 26 déc. 2006, 18:59
par ouckileou
HAVING n'aidera pas vraiment,
Ah ? Dommage, j'aime bien le Having :lol: