MarvinLeRouge Posté 7 Janvier 2005 Posté 7 Janvier 2005 Conseil pour trouver le pb : 1) Tu prends un outil d'administration de bdd quelconque (phpMyAdmin, Sql Yog ...) 2) Tu tapes ta requète dedans et tu regardes ce qui sort 3) Tu réduis ta requète à une version ultra-top simplifiée (aucun where au départ), puis tu la rallonges petit à petit jusqu'à trouver où ça fait tilt
furious Gontran Posté 7 Janvier 2005 Auteur Posté 7 Janvier 2005 Merci pour les trucs... En fait c'etait un truc tout con ma table zoom etait vide....
Dan Posté 7 Janvier 2005 Posté 7 Janvier 2005 En fait c'etait un truc tout con ma table zoom etait vide.... Merci pour cette info... parce que même en cherchant bien on ne voyait pas où se trouvait l'erreur
furious Gontran Posté 7 Janvier 2005 Auteur Posté 7 Janvier 2005 (modifié) Vi, excuse je m'en suis apercu que ce matin moi meme.... J'ais donc remplis cette table avec test pour tous les champs. Hé ben ca merdouille encore. Voici la requete: SELECT * FROM chroniques, traverse, zoom WHERE chroniques.Titre LIKE '%noir%' OR chroniques.Resume LIKE '%noir%' OR zoom.Titre LIKE '%noir%' OR zoom.Resume LIKE '%noir%' OR traverse.Titre LIKE '%noir%' OR traverse.Resume LIKE '%noir%' LIMIT 0,20 La ca me sors tout le contenu de la table chroniques, alors qu'il n'y a qu'un article de la table traverse dont le titre contient le mot noir. Par contre si je cherche un mot se trouvant dans la table chroniques il me sors juste l'article le contenant... La recherche sur une seule table marche tres bien. SELECT * FROM chroniques, traverse, zoom WHERE 1 AND ( (chroniques.Titre LIKE '%batman%') OR (chroniques.Resume LIKE '%batman%') ) AND ( (zoom.Titre LIKE '%batman%') OR (zoom.Resume LIKE '%batman%') ) AND ( (traverse.Titre LIKE '%batman%') OR (traverse.Resume LIKE '%batman%') ) LIMIT 0,20 Ne me sors rien alors qu'un article de chroniques contient le mot... Si j'execute cette requete sous php my admin c'est la meme a la difference qu'il me sors toutes les valeurs de toutes les tables... Mon champ resume est vide partout. Est ce de la que viens le probleme ?? Ca serais bizarre rien n'est pas == a "noir"... (si c'est le cas comment on fais pour eviter qu'un champ vide bloque tout) en gros la c'est un peu gonflant on dirais qu'il n'effestue bien la recherche que sur la premiere table de la liste. Modifié 7 Janvier 2005 par furious Gontran
Anonymus Posté 7 Janvier 2005 Posté 7 Janvier 2005 Cherches à comprendre ta requète. Ne places pas les AND n'importe où, sinon tu restreins la requète. Là, tu as peut etre trop mis de AND, ou pas assez de parenthèses. Pour éviter qu'un champ soit vide lors de la requète, mets un test : if(!empty($word))$WHERE ?= REQUETE etc..
Dan Posté 7 Janvier 2005 Posté 7 Janvier 2005 Salut Furious Gontran, Tes tables sont grosses ? Pourrais-tu poster un export de ces 3 tables ? Histoire de pouvoir tester en local ce que cela donne Dan
Dan Posté 7 Janvier 2005 Posté 7 Janvier 2005 SELECT * FROM chroniques, traverse, zoom WHERE 1 AND ( (chroniques.Titre LIKE '%batman%') OR (chroniques.Resume LIKE '%batman%') ) AND ( (zoom.Titre LIKE '%batman%') OR (zoom.Resume LIKE '%batman%') ) AND ( (traverse.Titre LIKE '%batman%') OR (traverse.Resume LIKE '%batman%') ) LIMIT 0,20 En fait tu cherches à sélectionner dans les tables chroniques, traverse et zoom les entrées qui: contiennent 'batman' dans le titre ou le resume de la table 'chroniques'ET contiennent 'batman' dans le titre ou le resume de la table 'zoom' ET contiennent 'batman' dans le titre ou le resume de la table 'traverse' Cela me semble pour le moins ambigu et irréaliste. Les recherches multi-tables sans "JOIN" (inner, right ou left) comprennent un "INNER JOIN" implicite matérialisé par la virgule. C'est à dire la matrice de toutes les entrées de toutes les tables. INNER JOIN et , (virgule) sont sémantiquement équivalents. Les deux opèrent une jointure totale sur les tables utilisées. Normalement, vous spécifiez les conditions de jointure dans la clause WHERE. La page sur mysql.com: http://dev.mysql.com/doc/mysql/fr/JOIN.html
furious Gontran Posté 7 Janvier 2005 Auteur Posté 7 Janvier 2005 _AT_Anonymous Pour l'erreur avec le AND je viens de comprendre. Mais le probleme viensde celle avec OR, je comprend ma requete et c'est bien l'action que je veux effectuer sur ma base: selectionne tous en provenance de chroniques, traverse, zoom où le titre de chronique ressemble a Noir ou bien le resume de chronique ressemble a noir ou bien le titre de traverse ressemble a noir....etc Le truc c'est que ma requete avec les OR ne marche pas plus... _AT_Dan Mes tables contiennent: 8entrees 2entrees 1entree que veux tu que je t'envois et ou ?
Dan Posté 7 Janvier 2005 Posté 7 Janvier 2005 Poste-les ici ou envoie-les moi par MP L'export total avec structure et données.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant