Bonjour, je débute avec SPIP et souhaiterais extraire les mots clés « tendance » assignés au articles des 10 derniers jours. J’ai réussi à obtenir le résultat souhaité en SQL, mais il me semble plus pertinent d’utiliser la syntax SPIP.
Comme le montre la requête SQL ci-dessous, je souhaites:
les mots dont le id_groupe_racine = 9
les 3 mots les plus utilisés
parmi les articles des 10 derniers jours
En SQL, je fais comme ça:
<BOUCLE_mots_tendances(MOTS)
{where id_mot IN (
-- 3 mots "Thématique" les plus utilisés parmi les articles des
-- 10 derniers jours
SELECT spip_mots.id_mot FROM spip_mots
JOIN spip_mots_liens ON spip_mots.id_mot = spip_mots_liens.id_mot
WHERE spip_mots.id_groupe_racine = 9
AND spip_mots_liens.objet = "article"
AND spip_mots_liens.id_objet IN (
-- IDs des articles des 10 derniers jours
SELECT spip_articles.id_article FROM spip_articles
WHERE spip_articles.date >= DATE("now", "- 10 day")
)
-- Séléction des 3 mots les plus fréquents
GROUP BY spip_mots_liens.id_mot
ORDER BY COUNT(*) DESC
LIMIT 3
)}
>
Mon équivalent SPIP bloque à ce stade (prématurèment):
Tu peux déjà ajouter ici le critère {id_groupe=9} et le retirer du where sql.
Ou {id_groupe_racine=9} car tu as renommé le champ ?
Et imbriquer tes 2 boucles dans l’autre sens évitera d’en faire une 3eme peut être…
J’ai vainement essayé de transcrire ma requête en SPIP en utilisant des jointures, mais si je comprends bien il n’est pas possible d’utiliser certains critères dans les conditions de jointure (ex: {articles.age < 123}). Si je suppose bien, seul les critères qui concernent directement des champs de la base de données sont opérable ? (il n’y a pas de colonne age, donc pas possible)
Pour ce qui est du plugin Bonux, ça semble chouette, mais c’est sûrement trop pour ce que j’ai à réaliser. Bon à savoir que ça existe en revanche, merci !
Au final j’ai opté pour une solution « algorithmique » un peu différente (en piquant des bouts de code par ci par là)