Requete multi table

Résolu
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009 - 31 juil. 2007 à 10:13
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009 - 9 août 2007 à 12:33
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

Tenqi Messages postés 10 Date d'inscription jeudi 26 juillet 2007 Statut Membre Dernière intervention 9 août 2007
8 août 2007 à 13:56
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,
3
kishkaya Messages postés 365 Date d'inscription samedi 26 juin 2004 Statut Membre Dernière intervention 17 avril 2008
31 juil. 2007 à 16:47
Bonjour,
Ca s'appelle les jointure SQl :
http://sqlpro.developpez.com/cours/sqlaz/jointures/

Bonne lecture

_Marikou
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
31 juil. 2007 à 17:21
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...
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
1 août 2007 à 10:58
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!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Tenqi Messages postés 10 Date d'inscription jeudi 26 juillet 2007 Statut Membre Dernière intervention 9 août 2007
3 août 2007 à 21:42
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,
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
8 août 2007 à 13:32
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!!!!
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
8 août 2007 à 14:09
Ah parfait!!!!

Merci beaucoup pour ta précieuse aide!!!!
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
9 août 2007 à 10:25
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.
0
Tenqi Messages postés 10 Date d'inscription jeudi 26 juillet 2007 Statut Membre Dernière intervention 9 août 2007
9 août 2007 à 10:42
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,
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
9 août 2007 à 11:18
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...
0
Tenqi Messages postés 10 Date d'inscription jeudi 26 juillet 2007 Statut Membre Dernière intervention 9 août 2007
9 août 2007 à 11:36
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,
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
9 août 2007 à 11:52
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....???
0
Tenqi Messages postés 10 Date d'inscription jeudi 26 juillet 2007 Statut Membre Dernière intervention 9 août 2007
9 août 2007 à 12:11
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,
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
9 août 2007 à 12:33
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.....
0
Rejoignez-nous