par
spirou » 31 juil. 2006, 17:32
D'accord, mais attention les yeux
Code : Tout sélectionner
SELECT C.nom AS categorie,
S.date AS suj_date,
SC.id AS id_soucat,
(SELECT MAX(id) FROM f_sujet WHERE id_ss_cat = id_soucat) AS suj_id,
(SELECT id_sujet FROM f_reponse R LEFT JOIN f_sujet S ON id_sujet = S.id WHERE id_ss_cat = id_soucat ORDER BY R.date DESC LIMIT 1) AS rep_id,
SC.nom AS soucat,
SC.comment,
COUNT(DISTINCT(S.id)) AS tt_sujet,
COUNT(R.id) AS tt_rep,
COALESCE( IF( S.date >= COALESCE( (SELECT MAX(date) FROM f_reponse WHERE id_sujet = rep_id), 1),
(SELECT id_membre FROM f_sujet WHERE id = suj_id),
(SELECT id_membre FROM f_reponse WHERE id_sujet = rep_id ORDER BY id DESC LIMIT 1) ), ' - ')
AS id_auteur,
COALESCE(IF( S.date >= COALESCE((SELECT MAX(date) FROM f_reponse WHERE id_sujet = rep_id), 1),
(SELECT DATE_FORMAT(date, '%d/%m/%Y à %Hh%i') FROM f_sujet WHERE id = suj_id),
(SELECT DATE_FORMAT(date, '%d/%m/%Y à %Hh%i') FROM f_reponse
WHERE id_sujet = rep_id ORDER BY id DESC LIMIT 1 ) ), ' - ')
AS date_der,
COALESCE(IF( S.date >= COALESCE((SELECT MAX(date) FROM f_reponse WHERE id_sujet = rep_id), 1),
(SELECT nom FROM f_sujet WHERE id = suj_id),
(SELECT nom FROM f_sujet WHERE id = rep_id ORDER BY id DESC LIMIT 1) ), ' - ')
AS sujet,
COALESCE(IF( S.date >= COALESCE((SELECT MAX(date) FROM f_reponse WHERE id_sujet = rep_id), 1),
(SELECT id FROM f_sujet WHERE id = suj_id),
(SELECT id_sujet FROM f_reponse
WHERE id_sujet = rep_id ORDER BY id DESC LIMIT 1) ), ' - ')
AS s_id,
COALESCE(IF( S.date >= COALESCE((SELECT MAX(date) FROM f_reponse WHERE id_sujet = rep_id), 1),
(SELECT COUNT(*) FROM f_topic_lu WHERE id_post = suj_id AND id_m_connect = " . protection($id_membre) . "),
(SELECT COUNT(*) FROM f_topic_lu WHERE id_post = rep_id AND id_m_connect = " . protection($id_membre) . ") ), ' - ')
AS vu,
(SELECT pseudo FROM m_connect WHERE id = id_auteur) AS auteur,
(SELECT groupe FROM m_connect WHERE id = id_auteur) AS groupe,
COALESCE( (SELECT id FROM f_reponse WHERE id_sujet = rep_id ORDER BY id DESC LIMIT 1), 0) AS ancre
FROM f_cat AS C
LEFT JOIN f_ss_cat AS SC
ON C.id = SC.id_cat
LEFT JOIN f_sujet AS S
ON SC.id = S.id_ss_cat
LEFT JOIN f_reponse AS R
ON S.id = R.id_sujet
GROUP BY SC.id
ORDER BY C.id, SC.id
Je n'ai pas trouvé comment faire autrement que me servir d'alias dans mes sous-requêtes pour obtenir ce que je voulais.
Je sais, c'est moche et lourd, mais j'ai vraiment galérer pour obtenir le résultat correct à l'affichage, surtout pour l'affichage de l'index.
D'accord, mais attention les yeux :oops:
[code]SELECT C.nom AS categorie,
S.date AS suj_date,
SC.id AS id_soucat,
(SELECT MAX(id) FROM f_sujet WHERE id_ss_cat = id_soucat) AS suj_id,
(SELECT id_sujet FROM f_reponse R LEFT JOIN f_sujet S ON id_sujet = S.id WHERE id_ss_cat = id_soucat ORDER BY R.date DESC LIMIT 1) AS rep_id,
SC.nom AS soucat,
SC.comment,
COUNT(DISTINCT(S.id)) AS tt_sujet,
COUNT(R.id) AS tt_rep,
COALESCE( IF( S.date >= COALESCE( (SELECT MAX(date) FROM f_reponse WHERE id_sujet = rep_id), 1),
(SELECT id_membre FROM f_sujet WHERE id = suj_id),
(SELECT id_membre FROM f_reponse WHERE id_sujet = rep_id ORDER BY id DESC LIMIT 1) ), ' - ')
AS id_auteur,
COALESCE(IF( S.date >= COALESCE((SELECT MAX(date) FROM f_reponse WHERE id_sujet = rep_id), 1),
(SELECT DATE_FORMAT(date, '%d/%m/%Y à %Hh%i') FROM f_sujet WHERE id = suj_id),
(SELECT DATE_FORMAT(date, '%d/%m/%Y à %Hh%i') FROM f_reponse
WHERE id_sujet = rep_id ORDER BY id DESC LIMIT 1 ) ), ' - ')
AS date_der,
COALESCE(IF( S.date >= COALESCE((SELECT MAX(date) FROM f_reponse WHERE id_sujet = rep_id), 1),
(SELECT nom FROM f_sujet WHERE id = suj_id),
(SELECT nom FROM f_sujet WHERE id = rep_id ORDER BY id DESC LIMIT 1) ), ' - ')
AS sujet,
COALESCE(IF( S.date >= COALESCE((SELECT MAX(date) FROM f_reponse WHERE id_sujet = rep_id), 1),
(SELECT id FROM f_sujet WHERE id = suj_id),
(SELECT id_sujet FROM f_reponse
WHERE id_sujet = rep_id ORDER BY id DESC LIMIT 1) ), ' - ')
AS s_id,
COALESCE(IF( S.date >= COALESCE((SELECT MAX(date) FROM f_reponse WHERE id_sujet = rep_id), 1),
(SELECT COUNT(*) FROM f_topic_lu WHERE id_post = suj_id AND id_m_connect = " . protection($id_membre) . "),
(SELECT COUNT(*) FROM f_topic_lu WHERE id_post = rep_id AND id_m_connect = " . protection($id_membre) . ") ), ' - ')
AS vu,
(SELECT pseudo FROM m_connect WHERE id = id_auteur) AS auteur,
(SELECT groupe FROM m_connect WHERE id = id_auteur) AS groupe,
COALESCE( (SELECT id FROM f_reponse WHERE id_sujet = rep_id ORDER BY id DESC LIMIT 1), 0) AS ancre
FROM f_cat AS C
LEFT JOIN f_ss_cat AS SC
ON C.id = SC.id_cat
LEFT JOIN f_sujet AS S
ON SC.id = S.id_ss_cat
LEFT JOIN f_reponse AS R
ON S.id = R.id_sujet
GROUP BY SC.id
ORDER BY C.id, SC.id[/code]
Je n'ai pas trouvé comment faire autrement que me servir d'alias dans mes sous-requêtes pour obtenir ce que je voulais.
Je sais, c'est moche et lourd, mais j'ai vraiment galérer pour obtenir le résultat correct à l'affichage, surtout pour l'affichage de l'index.