Au lieu de trier les articles par leur nombre de messages de forum, ils sont triés par le nombre de messages de forum écrits par les auteurs de l'article.
En l'occurence, la requête SQL générée est :
SELECT COUNT(L2.id_forum) AS compteur_forum, articles.titre, articles.lang
FROM spip_articles AS `articles`
INNER JOIN spip_auteurs_articles AS L1 ON ( L1.id_article = articles.id_article )
INNER JOIN spip_forum AS L2 ON ( L2.id_auteur = L1.id_auteur )
WHERE (articles.statut = 'publie')
AND (articles.date < '2037-09-05 09:52:00')
GROUP BY articles.id_article
ORDER BY compteur_forum DESC
Il a apparaît que la table spip_forum est jointe selon id_auteur et non selon id_article !!
Au lieu de trier les articles par leur nombre de messages de forum, ils sont
triés par le nombre de messages de forum écrits par les auteurs de
l'article.
En l'occurence, la requête SQL générée est :
SELECT COUNT(L2.id_forum) AS compteur_forum, articles.titre, articles.lang
FROM spip_articles AS `articles`
INNER JOIN spip_auteurs_articles AS L1 ON ( L1.id_article =
articles.id_article )
INNER JOIN spip_forum AS L2 ON ( L2.id_auteur = L1.id_auteur )
WHERE (articles.statut = 'publie')
AND (articles.date < '2037-09-05 09:52:00')
GROUP BY articles.id_article
ORDER BY compteur_forum DESC
Il a apparaît que la table spip_forum est jointe selon id_auteur et non
selon id_article !!
Oui et ça n'est pas moins juste qu'une jointure sur la table forum par
id_article
Ce problème n'est pas nouveau, il est lié au mécanisme des jointures
auto réalisées par le compilateur, et au fait qu'entre 2 jointures
possibles, la première trouvée sera utilisée.
Tu peux lever l'ambiguité en écrivant
<BOUCLE_essai(ARTICLES forum){compteur forum}{par compteur_forum}{inverse}>
Ce problème n'est pas nouveau, il est lié au mécanisme des jointures
auto réalisées par le compilateur, et au fait qu'entre 2 jointures
possibles, la première trouvée sera utilisée.
Tu peux lever l'ambiguité en écrivant
<BOUCLE_essai(ARTICLES forum){compteur forum}{par compteur_forum}{inverse}>
Cédric
Merci pour l'astuce.
Essai avec ta proposition. J'obtiens toujours :
SELECT COUNT(L2.id_forum) AS compteur_forum, articles.titre, articles.lang
FROM spip_articles AS `articles`
INNER JOIN spip_auteurs_articles AS L1 ON ( L1.id_article = articles.id_article )
INNER JOIN spip_forum AS L2 ON ( L2.id_auteur = L1.id_auteur )
WHERE (articles.statut = 'publie')
AND (articles.date < '2037-09-05 11:47:14')
GROUP BY articles.id_article
ORDER BY compteur_forum DESC
Si j'essaie
<BOUCLE_essai(ARTICLES){forum.statut=publie}{compteur forum}{par compteur_forum}{inverse}>
J'obtiens
SELECT COUNT(L4.id_forum) AS compteur_forum, articles.titre, articles.lang
FROM spip_articles AS `articles`
INNER JOIN spip_auteurs_articles AS L3 ON ( L3.id_article = articles.id_article )
INNER JOIN spip_forum AS L4 ON ( L4.id_auteur = L3.id_auteur )
INNER JOIN spip_auteurs_articles AS L1 ON ( L1.id_article = articles.id_article )
INNER JOIN spip_forum AS L2 ON ( L2.id_auteur = L1.id_auteur )
WHERE (articles.statut = 'publie')
AND (articles.date < '2037-09-05 11:50:26')
AND (L2.statut = 'publie')
GROUP BY articles.id_article
ORDER BY compteur_forum DESC
Le 20 avril 2010 14:01, Joseph <joseph@larmarange.net> a écrit :
Le 20/04/2010 11:23, Cédric Morin a écrit :
Ce problème n'est pas nouveau, il est lié au mécanisme des jointures
auto réalisées par le compilateur, et au fait qu'entre 2 jointures
possibles, la première trouvée sera utilisée.
Tu peux lever l'ambiguité en écrivant
<BOUCLE_essai(ARTICLES forum){compteur forum}{par
compteur_forum}{inverse}>
Cédric
Merci pour l'astuce.
Essai avec ta proposition. J'obtiens toujours :
SELECT COUNT(L2.id_forum) AS compteur_forum, articles.titre, articles.lang
FROM spip_articles AS `articles`
INNER JOIN spip_auteurs_articles AS L1 ON ( L1.id_article =
articles.id_article )
INNER JOIN spip_forum AS L2 ON ( L2.id_auteur = L1.id_auteur )
WHERE (articles.statut = 'publie')
AND (articles.date < '2037-09-05 11:47:14')
GROUP BY articles.id_article
ORDER BY compteur_forum DESC
Ah oui mince, ça ne résoud rien car la jointure se fait de la même façon.
Tu peux ouvrir un ticket sur trac pour garder la trace stp ?