MarvinLeRouge Posté 7 Janvier 2005 Partager 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
furious Gontran Posté 7 Janvier 2005 Auteur Partager Posté 7 Janvier 2005 Merci pour les trucs... En fait c'etait un truc tout con ma table zoom etait vide.... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dan Posté 7 Janvier 2005 Partager 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
furious Gontran Posté 7 Janvier 2005 Auteur Partager 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Anonymus Posté 7 Janvier 2005 Partager 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.. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dan Posté 7 Janvier 2005 Partager 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dan Posté 7 Janvier 2005 Partager 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
furious Gontran Posté 7 Janvier 2005 Auteur Partager 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 ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dan Posté 7 Janvier 2005 Partager Posté 7 Janvier 2005 Poste-les ici ou envoie-les moi par MP L'export total avec structure et données. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant