Comment faire une boucle spip avec jointure sur les mots clés et articles

Bonjour,

Je souhaite afficher une liste de mots clé sur le site si et seulement
si il y a un article qui a ce mot clé et donc la date est supérieure
ou égale à celle du jour et comprise dans un intervalle de temps.

Voici ma requête en base de donnée avec la date simplifiée qui fonctionne :

SELECT A.id_article, A.titre, A.date, M.titre
FROM spip_articles A
INNER JOIN spip_mots_articles MA ON ( MA.id_article = A.id_article )
INNER JOIN spip_mots M ON ( M.id_mot = MA.id_mot )
WHERE `A`.`date` > '2010-01-20'
AND `A`.`date` < '2010-01-28'
AND M.id_groupe = 1
GROUP BY M.titre
LIMIT 0 , 30

Et voici mon test pour faire une boucle spip :

<BOUCLE_mots_evenement(ARTICLES mots_articles mots){par date}{age<=0}
{age>-7}{id_groupe=1}{par mots.titre}>
#TITRE<br />
</BOUCLE_mots_evenement>

Et je bloque, je n'ai pas les mots clés qui se regroupent, et c'est
les noms des articles qui apparaissent...

Si vous pouvez m'aider, merci

--
Cordialement,

André Payan

Bonsoir,

Le 20 janv. 10 à 18:12, André Payan a écrit :

Je souhaite afficher une liste de mots clé sur le site si et seulement
si il y a un article qui a ce mot clé et donc la date est supérieure
ou égale à celle du jour et comprise dans un intervalle de temps.

[..]

Et voici mon test pour faire une boucle spip :

<BOUCLE_mots_evenement(ARTICLES mots_articles mots){par date}{age<=0}
{age>-7}{id_groupe=1}{par mots.titre}>
#TITRE<br />
</BOUCLE_mots_evenement>

Et je bloque, je n'ai pas les mots clés qui se regroupent, et c'est
les noms des articles qui apparaissent...

Normal : tu fais une boucle sur les ARTICLES.

Je suggérerais de faire ça en 2 temps : tu récupères les articles qui ont les bons
critères, puis les mots-clé associés en le stockant dans un doublon "mots"

Reste à faire une boucle pour classer tes mots-clé

<BOUCLE_articles_evenement(ARTICLES){age<=0}{age>-7}>
  <BOUCLE_mots_evenement(MOTS){id_article}{doublons mots}>
  </BOUCLE_mots_evenement>
</BOUCLE_mots_evenement>

<BOUCLE_mots(MOTS){id_groupe=1}{! doublons mots}{par titre}>
  #TITRE<br />
</BOUCLE_mots>

Mais ce n'est pas très optimisé.

Autre idée, mais un peu au pif car je ne connais pas bien la syntaxe de jointure
dans les boucles spip :

<BOUCLE_mots_evenement(MOTS mots_articles articles){par date}{age<=0}
{age>-7}{id_groupe=1}{par mots.titre}>
#TITRE<br />
</BOUCLE_mots_evenement>

--
Florence HENRY
LESIA - Observatoire de Paris

Le 21 janvier 2010 00:06, Florence HENRY <florence.henry@obspm.fr> a écrit :

Bonsoir,

Normal : tu fais une boucle sur les ARTICLES.

Je suggérerais de faire ça en 2 temps : tu récupères les articles qui ont
les bons
critères, puis les mots-clé associés en le stockant dans un doublon "mots"

Reste à faire une boucle pour classer tes mots-clé

<BOUCLE_articles_evenement(ARTICLES){age<=0}{age>-7}>
<BOUCLE_mots_evenement(MOTS){id_article}{doublons mots}>
</BOUCLE_mots_evenement>
</BOUCLE_mots_evenement>

<BOUCLE_mots(MOTS){id_groupe=1}{! doublons mots}{par titre}>
#TITRE<br />
</BOUCLE_mots>

--
Florence HENRY

Bonjour Florence,

ça marche nickel, en imbriquant les boucles entre elle, merci.
Pour la seconde solution, j'avais testé ce n'est pas concluant.

Je vais essayé de trouver la solution avec les jointures spip, ça doit
être faisaible et si je trouve, je vous en fait part car là au niveau
du temps de calcul c'est un peu long :
- spip : 0.479s
- phpmyadmin : 0.0079 sec

Encore merci.

--
Cordialement,

André Payan

En utilisant cette jointure, j'économise une requete :

<BOUCLE_articles_evenement(ARTICLES){par date}{age<=0}{age>-7}>
<BOUCLE_mots_evenement(MOTS
mots_articles){id_article}{id_groupe=1}{par titre}{doublons mots}>
  #TITRE<br />
</BOUCLE_mots_evenement>
</BOUCLE_articles_evenement>

Par contre pas de changement en temps d'execution : 0.466s

--
Cordialement,

André Payan

Le 21 janvier 2010 14:34, arthegone arthegone <arthegone@gmail.com> a écrit :

Moi je serais sans doute parti sur un truc du genre :

<ul>
<BOUCLE_mot(MOTS)>
<BOUCLE_article(ARTICLES){id_mot}{0,1}{age<=0}{age>-7}>
<li>[(#_mot:TITRE)]</li>
</BOUCLE_article>
</BOUCLE_mot>
</ul>

Ce qui nous permet de classer les mots par titre.

aRTHEGONe

Bonjour aRTHEGONe,

Avec la boucle précédente, j'ai aussi mon classement par titre de mot clé.

Par contre, j'ai du manqué un épisode de spip, ou est documenté cette
synthaxe [(#_mot:TITRE)]

En utilisant plutôt ce code, je tombe aussi sur ce que je veux :

<BOUCLE_mot(MOTS){id_groupe=1}{par titre}>
    <BOUCLE_article(ARTICLES){id_mot}{0,1}{age<=0}{age>-7}>
        [(#_mot:TITRE)]<br />
    </BOUCLE_article>
</BOUCLE_mot>

Temps de calcul 0.277s

Merci

--
Cordialement,

André Payan

Le 21/01/10 14:58, André Payan a écrit :

Par contre, j'ai du manqué un épisode de spip, ou est documenté cette
synthaxe [(#_mot:TITRE)]

de bonnes recherches sur :
   Programmable Search Engine

ou (plus simple ?) :
   http://questions.magraine.net/votre recherche ici

Le 21 janvier 2010 15:41, denisb <denisb@laposte.net> a écrit :

Le 21/01/10 14:58, André Payan a écrit :

Par contre, j'ai du manqué un épisode de spip, ou est documenté cette
synthaxe [(#_mot:TITRE)]

La syntaxe des balises SPIP - SPIP

de bonnes recherches sur :
Programmable Search Engine

ou (plus simple ?) :
http://questions.magraine.net/votre recherche ici

Merci pour ces précisions.

--
Cordialement,

André Payan

Le 21/01/2010 15:46, André Payan a écrit :

Par contre, j'ai du manqué un épisode de spip, ou est documenté cette
synthaxe [(#_mot:TITRE)]

La syntaxe des balises SPIP - SPIP

peut être que ça te permet de faire avec une seule boucle,
avec une boucle comme tu essayais de faire initialement ?

JLuc

Le 21/01/10 16:15, JLuc a écrit :

peut être que ça te permet de faire avec une seule boucle,
avec une boucle comme tu essayais de faire initialement ?

non.
le principe de la balise non ambigüe c'est de pouvoir récupérer
une balise associée au suffixe de la boucle d'où on veut récupérer
sa valeur (... hum, pas très français tout ça...).

sur *une* seule boucle, l'intérêt est nul.

et spip ne sait toujours pas traiter 2 balises de même nom mais de
table différentes : typiquement une boucle ARTICLES avec une jointure
sur MOTS ; #TITRE affiche quoi ? la valeur correspondante de la
*table principale* (FROM).

Denis vient de répondre à ma place, la balise ambigüe ne marche que
pour les boucles imbriquées.
Pas pour les boucles avec des jointures, peut être que dans le temps
ça viendra qui sait.

En tout cas merci pour votre aide à tous.
Par contre, je n'arrive pas à tout faire passer dans une seule boucle
avec des jointures snif snif, et j'ai essayé x possibilités, en
inversant l'ordre des noms :
<BOUCLE_mots_evenement(ARTICLES mots_articles mots) .... >
<BOUCLE_mots_evenement(MOTS mots_articles articles) .... >
<BOUCLE_mots_evenement(MOTS_ARTICLES articles mots) .... >
....

Ainsi qu'avec les noms en minuscule
<BOUCLE_mots_evenement(articles mots_articles mots) .... >
<BOUCLE_mots_evenement(mots mots_articles articles) .... >
<BOUCLE_mots_evenement(mots_articles articles mots) .... >
....

D'ailleurs, au niveau de la syntaxe exacte niveau évolutivité, c'est
quoi j'ai fait des recherches, un coup j'ai droit au nom en majuscule
puis minuscule ( http://programmer.spip.org/Forcer-des-jointures ) et
un coup tout en minuscule (
http://www.spip-contrib.net/Acces-SPIP-aux-tables-externes-et )

--
Cordialement,

André Payan

Le 21 janvier 2010 16:39, André Payan a écrit :

D'ailleurs, au niveau de la syntaxe exacte niveau évolutivité, c'est
quoi j'ai fait des recherches, un coup j'ai droit au nom en majuscule
puis minuscule ( http://programmer.spip.org/Forcer-des-jointures ) et

Spip 2

un coup tout en minuscule (
Accés SPIP aux tables non-SPIP et jointures - SPIP-Contrib )

Spip 1.9

c'est comme le Port-Salut, c'est écrit dessus :wink:

--
@plus

Jacques

Pour les lyonnais++ spip-lyon@rezo.net http://spip-party.net/-Lyon-

Le 21/01/10 16:39, André Payan a écrit :

D'ailleurs, au niveau de la syntaxe exacte niveau évolutivité, c'est
quoi j'ai fait des recherches, un coup j'ai droit au nom en majuscule
puis minuscule ( http://programmer.spip.org/Forcer-des-jointures ) et
un coup tout en minuscule (
Accés SPIP aux tables non-SPIP et jointures - SPIP-Contrib )

peut-être voir :
   http://comments.gmane.org/gmane.comp.web.spip.user/148411

plus précisemment :
   http://permalink.gmane.org/gmane.comp.web.spip.user/148535