Le principe consiste en fait à combiner les résultats des deux requêtes pour générer une liste d'enregistrement que tu peux ensuite interroger.
Concrètement, la première requête retourne un tableau de résultat avec uniquement les sujets
Code : Tout sélectionner
type_message | p.id | p.id_forum | p.titre_rewrite | p.titre | p.date_ajout
-------------------------------------------------------------------------------------------
topic | 1 | 1 | Titre Sujet 1 | Titre Sujet 1 | 01/02/2015
topic | 2 | 1 | Titre Sujet 2 | Titre Sujet 2 | 10/02/2015
la seconde requête retourne un tableau de résultat avec uniquement les réponses, et les informations des sujets auxquelles elles répondent
Code : Tout sélectionner
type_message | m.id_post | p.id_forum | p.titre_rewrite | p.titre | m.date_ajout
-------------------------------------------------------------------------------------------
answer | 1 | 1 | Titre Sujet 1 | Titre Sujet 1 | 05/02/2015
answer | 2 | 1 | Titre Sujet 2 | Titre Sujet 2 | 15/02/2015
answer | 3 | 1 | Titre Sujet 1 | Titre Sujet 1 | 20/02/2015
La commande UNION ALL, te permet de regrouper les deux tableaux dans un seul. Il est donc indispensable que chaque requête retourne le même nombre de champ, de même type et dans le même ordre pour conserver la structure du tableau :
Code : Tout sélectionner
type_message | ? | p.id_forum | p.titre_rewrite | p.titre | ?.date_ajout
-------------------------------------------------------------------------------------------
topic | 1 | 1 | Titre Sujet 1 | Titre Sujet 1 | 01/02/2015
topic | 2 | 1 | Titre Sujet 2 | Titre Sujet 2 | 10/02/2015
answer | 1 | 1 | Titre Sujet 1 | Titre Sujet 1 | 05/02/2015
answer | 2 | 1 | Titre Sujet 2 | Titre Sujet 2 | 15/02/2015
answer | 3 | 1 | Titre Sujet 1 | Titre Sujet 1 | 20/02/2015
Enfin le "SELECT * FROM (###) ORDER BY date_ajout" te permet de trier ce tableau comme tu l'entends, (###) étant finalement une vue de ta base de données.
Code : Tout sélectionner
type_message | ? | p.id_forum | p.titre_rewrite | p.titre | ?.date_ajout
-------------------------------------------------------------------------------------------
answer | 3 | 1 | Titre Sujet 1 | Titre Sujet 1 | 20/02/2015
answer | 2 | 1 | Titre Sujet 2 | Titre Sujet 2 | 15/02/2015
topic | 2 | 1 | Titre Sujet 2 | Titre Sujet 2 | 10/02/2015
answer | 1 | 1 | Titre Sujet 1 | Titre Sujet 1 | 05/02/2015
topic | 1 | 1 | Titre Sujet 1 | Titre Sujet 1 | 01/02/2015
Tu peux ainsi parcourir le résultat et afficher la dernière réponse au sujet 1, puis la réponse au sujet 2, puis le sujet 2, puis une réponse au sujet 1 et enfin le sujet 1, ce qui correspond à l'ordre chronologique des posts
Quant à ajouter une colonne, il faut donc effectivement l'ajouter au même endroit dans les 2 requêtes. Sauf que " m.id ", c'est à dire " forum_messages.id ", qui fait donc référence à la colonne "id" de la table "forum_messages", n'est disponible que dans la seconde requête. Il te faut donc trouver l'équivalent dans la première requête qui ne sollicite pour le moment que la table forum_posts
En espérant que maintenant ça soit plus clair

Le principe consiste en fait à combiner les résultats des deux requêtes pour générer une liste d'enregistrement que tu peux ensuite interroger.
Concrètement, la première requête retourne un tableau de résultat avec uniquement les sujets
[code]type_message | p.id | p.id_forum | p.titre_rewrite | p.titre | p.date_ajout
-------------------------------------------------------------------------------------------
topic | 1 | 1 | Titre Sujet 1 | Titre Sujet 1 | 01/02/2015
topic | 2 | 1 | Titre Sujet 2 | Titre Sujet 2 | 10/02/2015
[/code]
la seconde requête retourne un tableau de résultat avec uniquement les réponses, et les informations des sujets auxquelles elles répondent
[code]type_message | m.id_post | p.id_forum | p.titre_rewrite | p.titre | m.date_ajout
-------------------------------------------------------------------------------------------
answer | 1 | 1 | Titre Sujet 1 | Titre Sujet 1 | 05/02/2015
answer | 2 | 1 | Titre Sujet 2 | Titre Sujet 2 | 15/02/2015
answer | 3 | 1 | Titre Sujet 1 | Titre Sujet 1 | 20/02/2015[/code]
La commande UNION ALL, te permet de regrouper les deux tableaux dans un seul. Il est donc indispensable que chaque requête retourne le même nombre de champ, de même type et dans le même ordre pour conserver la structure du tableau :
[code]type_message | ? | p.id_forum | p.titre_rewrite | p.titre | ?.date_ajout
-------------------------------------------------------------------------------------------
topic | 1 | 1 | Titre Sujet 1 | Titre Sujet 1 | 01/02/2015
topic | 2 | 1 | Titre Sujet 2 | Titre Sujet 2 | 10/02/2015
answer | 1 | 1 | Titre Sujet 1 | Titre Sujet 1 | 05/02/2015
answer | 2 | 1 | Titre Sujet 2 | Titre Sujet 2 | 15/02/2015
answer | 3 | 1 | Titre Sujet 1 | Titre Sujet 1 | 20/02/2015[/code]
Enfin le "SELECT * FROM (###) ORDER BY date_ajout" te permet de trier ce tableau comme tu l'entends, (###) étant finalement une vue de ta base de données.
[code]type_message | ? | p.id_forum | p.titre_rewrite | p.titre | ?.date_ajout
-------------------------------------------------------------------------------------------
answer | 3 | 1 | Titre Sujet 1 | Titre Sujet 1 | 20/02/2015
answer | 2 | 1 | Titre Sujet 2 | Titre Sujet 2 | 15/02/2015
topic | 2 | 1 | Titre Sujet 2 | Titre Sujet 2 | 10/02/2015
answer | 1 | 1 | Titre Sujet 1 | Titre Sujet 1 | 05/02/2015
topic | 1 | 1 | Titre Sujet 1 | Titre Sujet 1 | 01/02/2015[/code]
Tu peux ainsi parcourir le résultat et afficher la dernière réponse au sujet 1, puis la réponse au sujet 2, puis le sujet 2, puis une réponse au sujet 1 et enfin le sujet 1, ce qui correspond à l'ordre chronologique des posts :)
Quant à ajouter une colonne, il faut donc effectivement l'ajouter au même endroit dans les 2 requêtes. Sauf que " m.id ", c'est à dire " forum_messages.id ", qui fait donc référence à la colonne "id" de la table "forum_messages", n'est disponible que dans la seconde requête. Il te faut donc trouver l'équivalent dans la première requête qui ne sollicite pour le moment que la table forum_posts ;)
En espérant que maintenant ça soit plus clair :)