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

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par jeroen, 14 Décembre 2009.

  1. jeroen
    jeroen WRInaute passionné
    Inscrit:
    30 Août 2002
    Messages:
    2 135
    J'aime reçus:
    0
    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:
    // 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...
     
  2. screuscreu
    screuscreu WRInaute impliqué
    Inscrit:
    14 Janvier 2008
    Messages:
    701
    J'aime reçus:
    0
    A tester, je suis vraiment pas sûr de moi !
    jcaron devrait bientôt passer par là pour donner une vrai version ;)

    Code:
    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
     
  3. jeroen
    jeroen WRInaute passionné
    Inscrit:
    30 Août 2002
    Messages:
    2 135
    J'aime reçus:
    0
    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é)
     
  4. Leonick
    Leonick WRInaute accro
    Inscrit:
    8 Août 2004
    Messages:
    19 413
    J'aime reçus:
    0
    d'après ce que j'ai compris de ce que tu veux, il te suffirait de filter avec
    Code:
     where id=thread
    non ?
     
  5. jeroen
    jeroen WRInaute passionné
    Inscrit:
    30 Août 2002
    Messages:
    2 135
    J'aime reçus:
    0
    Mais si je fais ça, je ne peux pas récupérer le nombre de message liés au thread, non ?
     
Chargement...
Similar Threads - [MySQL] Récupérer première Forum Date
[résolu][mysql] faire un "NOT LIKE" sur une chaîne contenant des / Développement d'un site Web ou d'une appli mobile 25 Octobre 2014
[MySQL] Liste (select) avec des lignes au hasard Développement d'un site Web ou d'une appli mobile 23 Octobre 2014
[MySQL] Requête SELECT et INSERT entre 3 tables liées+Aide Développement d'un site Web ou d'une appli mobile 30 Avril 2014
[MySQL] Nombre d'enregistrements sur des horaires précis Développement d'un site Web ou d'une appli mobile 19 Juillet 2013
[MYSQL] Comment remplacer caractères dans tous les champs de toutes les tables d'une base? Développement d'un site Web ou d'une appli mobile 11 Juillet 2013
[MYSQL] Une sorte de "OR JOIN" ? Développement d'un site Web ou d'une appli mobile 5 Juillet 2013
[MySQL] sélectionner la dernière note pour chaque élève en une seule requète ? Développement d'un site Web ou d'une appli mobile 12 Avril 2012
[Mysql] Requête PDO avec variable php Développement d'un site Web ou d'une appli mobile 16 Février 2012
[Mysql] Requête PDO aléatoire Développement d'un site Web ou d'une appli mobile 7 Février 2012
[MYSQL] Tri par date Développement d'un site Web ou d'une appli mobile 7 Septembre 2011