[MySQL] Récupérer la première ligne d'un GROUP BY
5 messages
• Page 1 sur 1
- jeroen
- WRInaute passionné

- Messages: 2461
- Inscription: 30 Aoû 2002
[MySQL] Récupérer la première ligne d'un GROUP BY
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
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...
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é

- Messages: 968
- Inscription: 14 Jan 2008
Re: [MySQL] Récupérer la première ligne d'un GROUP BY
A tester, je suis vraiment pas sûr de moi !
jcaron devrait bientôt passer par là pour donner une vrai version
Bon courage
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
-

Leonick - WRInaute accro

- Messages: 19595
- Inscription: 8 Aoû 2004
Re: [MySQL] Récupérer la première ligne d'un GROUP BY
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
5 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- Requête mysql avec GROUP BY
- MySQL GROUP BY sur le dernier enregistrement
- Formulation d'un requête mysql : MAX, COUNT et GROUP BY
- MySQL : SELECT spécial avec GROUP BY sur condition ?
- Récupérer la première lettre d'un mot
- Récupérer la première lettre d'un mot en PHP... et UTF-8
- Première ligne dans la page
- première mise en ligne de mon site
- Commande SQL qui ne modifie que la première ligne...
- première mise en ligne de mon site perso
- Du nouveau du côté des laboratoires de Google : Google Labs - 20-05-2002
- Accord entre Ask Jeeves et Google - 18-07-2002
- Google Calendar API - 20-04-2006
- Gestion des langues et des sessions en PHP / MySQL - 02-05-2004
- Microsoft rachète Powerset, moteur de recherche sémantique - 02-07-2008
- Passage à l'heure d'été/hiver sur un forum phpBB - 31-10-2010
- Google Présentations, une sorte de Powerpoint en ligne et gratuit - 18-09-2007
- OpenSocial : le projet de Google pour contrôler les réseaux sociaux - 31-10-2007
- 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é
