flopad
Messages postés528Date d'inscriptionmercredi 28 septembre 2005StatutMembreDernière intervention 6 mars 2009
-
31 juil. 2007 à 10:13
flopad
Messages postés528Date d'inscriptionmercredi 28 septembre 2005StatutMembreDerniè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%"
";
flopad
Messages postés528Date d'inscriptionmercredi 28 septembre 2005StatutMembreDerniè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 :
flopad
Messages postés528Date d'inscriptionmercredi 28 septembre 2005StatutMembreDerniè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!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Tenqi
Messages postés10Date d'inscriptionjeudi 26 juillet 2007StatutMembreDerniè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.
flopad
Messages postés528Date d'inscriptionmercredi 28 septembre 2005StatutMembreDerniè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!!!!
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.
Tenqi
Messages postés10Date d'inscriptionjeudi 26 juillet 2007StatutMembreDerniè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
flopad
Messages postés528Date d'inscriptionmercredi 28 septembre 2005StatutMembreDerniè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...
Tenqi
Messages postés10Date d'inscriptionjeudi 26 juillet 2007StatutMembreDerniè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...
flopad
Messages postés528Date d'inscriptionmercredi 28 septembre 2005StatutMembreDerniè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.....
Tenqi
Messages postés10Date d'inscriptionjeudi 26 juillet 2007StatutMembreDerniè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 "à", ...)
flopad
Messages postés528Date d'inscriptionmercredi 28 septembre 2005StatutMembreDerniè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.....