recherche multicritère avec id_mot[]

Bonjour à tous,

J'ai un moteur de recherche par mot clés. Les utilisateurs sélectionnent
des critères dans des listes déroulantes.

J'envoie ensuite un tableau id_mot[] en POST

Je souhaite afficher ensuite la liste des articles qui ont tous ces mots
clès (ET et non pas OU)

Si j'utilise l'opérateur IN, j'obtiens les articles qui ont au moins un
des mots clés du array. Ce que je ne veux pas.

{id_mot IN #ENV{id_mot}}

Comment puis-je obtenir directement à partir de mon array id_mot[]
quelques choses qui ressemblerais à :

{id_mot=critere_1} {id_mot=critere_2} ...

Pour une requête id_mot=12 AND id_mot=13 etc...

Merci d'avance pour vos idées

++ Yves

Avec Spip 2.0.10

On 23/04/10 18:38, Yves Tan wrote:

Comment puis-je obtenir directement à partir de mon array id_mot
quelques choses qui ressemblerais à :

{id_mot=critere_1} {id_mot=critere_2} ...

Est-ce cela : Plugin « Critère {mots} » - SPIP-Contrib ?

Paolo

Le 23/04/10 19:20, Paolo a écrit :

On 23/04/10 18:38, Yves Tan wrote:

Comment puis-je obtenir directement à partir de mon array id_mot
quelques choses qui ressemblerais à :

{id_mot=critere_1} {id_mot=critere_2} ...

Est-ce cela : Plugin « Critère {mots} » - SPIP-Contrib ?

Paolo

Ca semble correspondre. Je vais essayer.

Merci beaucoup !

Yves

Le 23/04/10 18:38, Yves Tan a écrit :

Je souhaite afficher ensuite la liste des articles qui ont tous ces mots
clès (ET et non pas OU)

au plus simple...
pour avoir les articles qui ont *à la fois* le
mot-clef 5 *et* le mot-clef 12 :

   <BOUCLE_a(ARTICLES) {id_mot = 5} {id_mot = 12}>

la requête sql produite :

   SELECT articles.id_article,
          articles.lang
     FROM spip_articles AS `articles`
          INNER JOIN spip_mots_articles AS L2
                  ON L2.id_article = articles.id_article
          INNER JOIN spip_mots_articles AS L1
                  ON L1.id_article = articles.id_article
    WHERE articles.statut = 'publie'
      AND L1.id_mot = 5
      AND L2.id_mot = 12
GROUP BY articles.id_article

Le 23/04/10 21:49, denisb a écrit :

au plus simple...

... et pour cause !

je viens de *relire* la question originale...

désolé.