Formulaire de recherche sur 3 tables

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Formulaire de recherche sur 3 tables

par caribou91 » 25 mai 2008, 17:02

Ok super ca marche.

Il suffit de faire autant de fois A qu'il y a d'articles cochés et idem pour les thématiques.
Ce qui donne une requête de ce style au final :

Code : Tout sélectionner

SELECT * FROM dossier WHERE id_dossier IN (SELECT id_dossier FROM dos_art WHERE id_article = '3') AND id_dossier IN (SELECT id_dossier FROM dos_the WHERE id_thematique = 6) AND id_dossier IN (SELECT id_dossier FROM dos_art WHERE id_article = '4') AND ...
Merci beaucoup pour ton aide

caribou91

par animithra » 25 mai 2008, 16:14

Mais en fait, ca se complique dès la phase A de ton code : comment récupérer de la liste des id_dossier de la table dos_art où les id_article correspondent à ceux des articles cochés ?
La réponse semble tout bêtement être dans ce que tu as énoncé au départ :
Ma base est composée d'une table dossiers qui comporte le champ id_dossier,puis 2 tables de correspondance: dos_art et dos_the.

dos_art est composé de 2 champs: id_dossier et id_article.
tu peux donc faire :

Code : Tout sélectionner

requeteA = SELECT id_dossier FROM dos_art WHERE id_article = idrécupéré
et pas
J'ai essayé SELECT * FROM `dos_the`WHERE `ID_ARTICLE`=1 AND `ID_ARTICLE`=2 mais cela ne retourne évidemment aucun résultat...
avec dos_the qui n'est pas logique ici.

Après tu fais de même pour les thématiques (requête B) puis pour la C :

Code : Tout sélectionner

SELECT * FROM dossier WHERE id_dossier IN (A) AND id_dossier IN (B)
Bonne progra !

par caribou91 » 25 mai 2008, 15:17

Merci animithra pour ce début de réponse malgré le fait que mon exposé ne soit pas très clair 8-)

Mais en fait, ca se complique dès la phase A de ton code : comment récupérer de la liste des id_dossier de la table dos_art où les id_article correspondent à ceux des articles cochés ?

Ex:
Voici ma table :
ID_DOSSIER ID_ARTICLE
1 6
1 7
1 8
1 9
1 10
1 11
1 12
1 13
2 1
2 2
2 3
2 4
2 5

Admettons que l'utilisateur ait coché les articles 1 et 2, quelle sera ma requête ?
J'ai essayé SELECT * FROM `dos_the`WHERE `ID_ARTICLE`=1 AND `ID_ARTICLE`=2 mais cela ne retourne évidemment aucun résultat...

Pour la jointure des tables, je ne connais pas mais je vais me renseigner.

Merci encore

par animithra » 25 mai 2008, 14:08

Bonjour.

Bon j'ai peur de ne pas tout avoir saisi, donc faudra faire avec ;)

Si ton but est de faire une recherche multi-critères, une bonne chose aurait été de fouiller sur le forum, il y a beaucoup de sujet qui en parle.
A défaut je prend le temps de réexpliquer.

Ton formulaire propose trois champs thématiques et un nombre n d'articles.

Lorsque tu le valides, tu dois écrire une requête qui - si j'ai bien compris - recherche parmi les les dossiers, ceux qui possèdent une des trois thématiques précisées parmi les articles sélectionnés.

Je te conseille de procéder comme il suit :
<?php

//récupération (dans un tableau) de la liste des id_article correspondants
//aux articles cochés

//récupération des thématiques recherchées.

//A : récupération de la liste des id_dossier de la table dos_art
//où les id_article correspondent à ceux des articles cochés

//B : récupération de la liste des id_dossier de la table dos_them
//où les id_thematique correspondant à ceux des thématiques recherchées

//C : récupération des données des dossiers où id_dossier appartient à la liste obtenue
//en A et en B (utilisation de la clause IN de SQL)

?>
Il est aussi possible de faire le travail en une seule requête (par jointure des tables) libre à toi de le faire ou pas.

En espérant t'avoir dépanné un peu.

Bonne progra !

Formulaire de recherche sur 3 tables

par caribou91 » 25 mai 2008, 13:00

Bonjour à tous,

J'ai une base de données mysql 4.1.
Ma base est composée d'une table dossiers qui comporte le champ id_dossier,puis 2 tables de correspondance: dos_art et dos_the.

dos_art est composé de 2 champs: id_dossier et id_article.

dos_the est composé de 2 champs: id_dossier et id_thematique.

Chaque dossier peut avoir plusieurs articles et chaque dossier peut avoir plusieurs thématiques.
J'ai un formulaire de recherche sur lequel je peux entrer 3 thématiques et cocher n articles.

Je vois comment faire lorsqu'il y a un article et une thématique à rechercher, mais lorsqu'il y en a plusieurs je ne sais pas comment faire.

Merci pour votre aide.