Requete multi table

[Résolu]
Signaler
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009
-
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009
-
Bonjour, j'ai une requete à faire sur plusieurs tables, je ne parviens pas à trouver la bonne syntaxe, qq'un peut il m'aider plesae..?

Voici ma requete, il faut que je recherche sur une table appelée "News" en plus de celle nommée "cms"

 $query = "SELECT nom_page,chemin,titre,contenu FROM cms
 WHERE nom_page LIKE "%$requete%"
 OR titre LIKE "%$requete%"
 OR contenu LIKE "%$requete%"
 ";

Merci d'avance!!!

14 réponses

Messages postés
10
Date d'inscription
jeudi 26 juillet 2007
Statut
Membre
Dernière intervention
9 août 2007

Bonjour,


ah ? tes 2 tables sont identiques ?

Dans ce cas, il n'existe pas (je pense) de lien entre tes tables. Il te faut donc utiliser un UNION des 2 tables :


SELECT nom_page, chemin, titre, contenu FROM cms WHERE [tes conditions]

UNION

SELECT nom_page, chemin, titre, contenu FROM news WHERE [tes conditions]

Numériquement,
Messages postés
365
Date d'inscription
samedi 26 juin 2004
Statut
Membre
Dernière intervention
17 avril 2008

Bonjour,
Ca s'appelle les jointure SQl :
http://sqlpro.developpez.com/cours/sqlaz/jointures/

Bonne lecture

_Marikou
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Bonjour,

merci pour le lien, je viens d'y jeter un oeil, a priori, la syntaxe qui me conviendrait serait celle-ci :

 $query = "SELECT nom_page,chemin,titre,contenu FROM cms NATURALJOIN news
 WHERE
 nom_page LIKE "%$requete%"
 OR titre LIKE "%$requete%"
 OR contenu LIKE "%$requete%"
 ";

Or, ca me sort une erreur sur les lignes suivantes :

 $result = mysql_query($query);


 $row = mysql_fetch_row($result);

Merci encore...
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Bonjour, j'ai avancé un petit peu, voici ma requete désormais :

SELECT cms.nom_page,cms.titre,cms.chemin,cms.contenu,news.nom_page,news.titre,news.chemin,news.contenu FROM cms JOIN news
 ON
 news.id=cms.id
 WHERE
 cms.nom_page LIKE "%$requete%"
 OR cms.titre LIKE "%$requete%"
 OR cms.contenu LIKE "%$requete%"
 OR news.nom_page LIKE "%$requete%"
 OR news.titre LIKE "%$requete%"
 OR news.contenu LIKE "%$requete%"

Par contre, apparemment, la recherche ne se fait plus que sur la table news....
QQ'un peut m'aider please???

Merci!
Messages postés
10
Date d'inscription
jeudi 26 juillet 2007
Statut
Membre
Dernière intervention
9 août 2007

Hello,


je pense que tu as encore un problème dans ta jointure. Il faut que tu
mettes dans ta jointure le lien qu'il existe entre tes 2 tables.


Si par exemple tu as une table ModeleVoiture (avec des valeurs 306,
Laguna, Golf...) et une table Marque (avec Renault, Peugeot, ...), la
jointure sera surement ModeleVoiture.id_marque = MarqueVoiture.id


Donc dans ton cas, c'est peut être quelque chose comme

 FROM cms INNER JOIN news ON cmw.id=news.id_cms

ou

 FROM cms INNER JOIN news ON cmw.id_news=news.id


Mais seul toi pourra trouver la réponse. On ne connait pas la structure de tes données.

Numériquement,
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Merci pour tes infos, mais je galère encore....peux tu me donner un coup de main avec les infos suivantes...?Voici la structure de mes tables :CMS : Champ TypeInterclassementAttributsNullDéfautExtraAction id int(11)  Non  auto_increment  nom_page varchar(200)latin1_swedish_ci Oui NULL   chemin varchar(200)latin1_swedish_ci Oui NULL   titre varchar(200)latin1_swedish_ci Oui NULL   contenu longtextlatin1_swedish_ci Oui NULL   abonnes longtextlatin1_swedish_ci Oui NULL  NEWS :  Champ TypeInterclassementAttributsNullDéfautExtraAction id int(11)  Non  auto_increment  nom_page varchar(100)latin1_swedish_ci Oui NULL   chemin varchar(100)latin1_swedish_ci Oui NULL   titre varchar(100)latin1_swedish_ci Oui NULL   contenu longtextlatin1_swedish_ci Oui NULL   abonnes longtextlatin1_swedish_ci Oui NULL  Merci beaucoup!!!!
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Ah parfait!!!!

Merci beaucoup pour ta précieuse aide!!!!
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Excuses moi, j'ai encore un petit soucis....

J'ai ajouté ceci pour "traduire" les éventuels accens saisis lors de la rechercche.
$caractere_special=array(
"à"=>"à",
"á"=>"á",
"â"=>"â",
"ã"=>"ã",
"ä"=>"ä",
"å"=>"å",
"æ"=>"æ",
"ç"=>"ç",
"è"=>"è",
"é"=>"é",
"ê"=>"ê",
"ë"=>"ë",
"î"=>"î",
"ï"=>"ï",
"ô"=>"ô",
"ö"=>"ö",
"ù"=>"ù",
"ú"=>"ú",
"û"=>"û",
"ü"=>"ü",
"&"=>"&",
);


$requete = str_replace(" "," ",$requete);
$requete = str_replace("  "," ",$requete);


foreach($caractere_special as $caractere_traduction=>$caractere_code)
{
$requete = str_replace("$caractere_traduction","$caractere_code",$requete);
}

J'exploite ensuite ma recherche de la manière suivante :

 $query = "SELECT nom_page,titre,chemin,contenu
 FROM cms
 WHERE
 nom_page LIKE "%$requete%"
 OR titre LIKE "%$requete%"
 OR contenu LIKE "%$requete%"
 UNION
SELECT nom_page,titre,chemin,contenu
 FROM news
 WHERE
 nom_page LIKE "%$requete%"
 OR titre LIKE "%$requete%"
 OR contenu LIKE "%$requete%"
 ";
 $result = mysql_query($query);


 $row = mysql_fetch_row($result);

Le problème est que lorsque je tape un mot avec un accent, ça ne me donne aucune réponse alors que si je copie cette requete dans phpmyadmin, elle fonctionne parfaitemment.....La traduction des caractères fonctionne bien.
Messages postés
10
Date d'inscription
jeudi 26 juillet 2007
Statut
Membre
Dernière intervention
9 août 2007

Bonjour,

pourquoi cherches-tu à convertir les accents ? Par défault, la requête ne fonctionne pas ?
Parce que je ne vois pas pourquoi ça ne serait pas ok par défault.

Et c'est normal que ta requête ne fonctionne pas parce que avec ta transformation, la requête exécutée est du genre :
SELECT nom_page,titre,chemin,contenu
 FROM cms
 WHERE
 nom_page LIKE "%aller à la piscine%" ...

et du coup, je doute que dans ton champ, tu ais "à" mais je pense que tu as plutôt "à".
Et c'est normal qu'en copiant la requête, elle fonctionne parce que ton browser t'affiche le caractère décodé (donc "à") et non "à". Regarde plutôt dans le code source de ta page, il devrait y avoir "à"

Pour info, la ligne
  $requete = str_replace("  "," ",$requete);
ne sert pas à grand chose

Numériquement,
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Non, dans ma bdd, les caractères avec accent sont du type é et pas é, car ils sont entrés via fckeditor.

si j'enlève le convertisseur de caractères, si je tape un é, ca ne marche pas mais ca fonctionne lorsque je tape é
Si je laisse mon convertisseur et que je tape un é, lorsque je fais un echo de ma requete, ca me converti bien mon accent mais ca ne me trouve aucune réponse.....je ne comprends pas...

Pour ce qui est de la ligne $requete = str_replace("  "," ",$requete); c'est seulment au cas où l'utilisateur ferait une erreur de frappe et tape plusieurs espaces...
Messages postés
10
Date d'inscription
jeudi 26 juillet 2007
Statut
Membre
Dernière intervention
9 août 2007

Re,

Donc en fait, quand tu fais un echo de ta requête, tu as par exemple
SELECT nom_page,titre,chemin,contenu
 FROM cms
 WHERE
 nom_page LIKE "%aller à la piscine%" ...
?

Et celle-ci ne fonctionne pas via ton php mais fonctionne quand elle est exécutée dans phpmyadmin ?

Essayes peut être en entourant ta valeur d'apostrophes et non de guillemets...

Numériquement,
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

En fait, je viens de refaire des essais, si je tape sécur, ca me sort8 enregistrements alors que si je tape sécu, ca me donne 11 enregistrements....

C'est la seconde méthode qui devrait marcher...

Ce que je ne omprends pas, c'est que lorsque je fais un echo de ma requete, elle est identique c'est à dire que je tape sécu ou sé c'est sécu qui apparait dans ma requete sans pour autant donner le même résultat.....

Que faire....???
Messages postés
10
Date d'inscription
jeudi 26 juillet 2007
Statut
Membre
Dernière intervention
9 août 2007

Re,

Concernant le fait que ça soit toujours "sécur" qui s'affiche et non "sécur", je te l'ai déjà expliqué précédement. Il faut que tu regardes le code source HTML, et non ce que t'affiches ton browser.

Sinon, le moyen le plus simple de résoudre ton problème ne serait-il pas de faire enregistrer les accents dans ta base de données (avec une fonction php au moment de l'insert, qui transforme les "à" en "à", ...)

Numériquement,
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Ca y est, j'ai trouvé, ca a l'air de marcher, j'avais oublié d'enlever le caractère & dans le array qui liste les caractères spéciaux à transformer.....