[MySQL] Récupérer la première ligne d'un GROUP BY

jeroen
WRInaute passionné
WRInaute passionné
 
Messages: 2461
Inscription: 30 Aoû 2002

[MySQL] Récupérer la première ligne d'un GROUP BY

Message le Lun Déc 14, 2009 11:03

Bonjour à tous, je vous expose mon problème, pas simple.

J'ai une table "forum" unique pour un forum, qui contient (entre autres) les champs suivants
- id (identifiant du message)
- thread (identifiant du thread = id du premier message du thread)
- date (date du message)
- titre (titre du message)
+ d'autre champs sans importance pour mon problème

Je cherche simplement à récupérer les 5 derniers thread, avec le nombre de réponses associées, la date et l'id de la dernière réponse, et le titre du premier message du thread

Pour l'heure je fais un
Code: Tout sélectionner
// selection 5 derniers thread
$threads=sql_gettab("SELECT thread, max(id) FROM forum GROUP BY thread ORDER BY max(id) DESC LIMIT 5");

// selection
$query="SELECT count(id) as cnt, max(id) as last_id, max(date) as last_date, thread, head FROM forum WHERE thread in (0";
foreach ($threads as $row) $query.=", ".$row[thread];
$query.=") GROUP BY thread ORDER BY last DESC";
$result=sql_gettab($query);


La première requête SQL permet d'optimiser le temps de traitement, car la deuxième est assez longue

LE PROBLEME est que lors du regroupement (GROUP BY) de la deuxième requête, je voudrais récuprérer le "head" qui correspond à la première ligne, et que là ça me sort un head aléatoire parmi toutes les lignes regroupées.

Un exemple
id thread head
12 12 salut wri
15 12 re: salut wri
17 12 coucou wri

lors du regroupement, je voudrai récupérer le head qui correspons au premier id, soit "salut wri", or ma requête récupère n'importe lequel (j'ai l'impression que c'est aléatoire).

Un coup de main ce serait super sympa...


screuscreu
WRInaute impliqué
WRInaute impliqué
 
Messages: 968
Inscription: 14 Jan 2008

Re: [MySQL] Récupérer la première ligne d'un GROUP BY

Message le Lun Déc 14, 2009 11:57

A tester, je suis vraiment pas sûr de moi !
jcaron devrait bientôt passer par là pour donner une vrai version ;)

Code: Tout sélectionner
SELECT
   DISTINCT F.thread,
   F.titre,
   F.date
   FCount.nb
FROM
   forum as F,
   (SELECT COUNT(id) as nb FROM forum as F2 WHERE F.thread = F2.thread GROUP BY F2.thread) as FCount
WHERE
   1
ORDER BY
   F.date DESC
LIMIT
   5


Bon courage

jeroen
WRInaute passionné
WRInaute passionné
 
Messages: 2461
Inscription: 30 Aoû 2002

Re: [MySQL] Récupérer la première ligne d'un GROUP BY

Message le Lun Déc 14, 2009 12:45

Merci de ton aide, je regarde ça de plus près mais je crois que MySQL n'accepte pas les GROUP BY dans une sous requête (j'avais testé)


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19595
Inscription: 8 Aoû 2004

Re: [MySQL] Récupérer la première ligne d'un GROUP BY

Message le Lun Déc 14, 2009 23:42

d'après ce que j'ai compris de ce que tu veux, il te suffirait de filter avec
Code: Tout sélectionner
where id=thread
non ?

jeroen
WRInaute passionné
WRInaute passionné
 
Messages: 2461
Inscription: 30 Aoû 2002

Re: [MySQL] Récupérer la première ligne d'un GROUP BY

Message le Mar Déc 15, 2009 0:46

Mais si je fais ça, je ne peux pas récupérer le nombre de message liés au thread, non ?


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :

  • Ancienneté d'un site dans Google
    Cet outil vous permet de connaître une estimation de l'ancienneté d'un site : il fournit la date à laquelle Google l'a indexé la première fois (et la même chose pour archive.org).


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité