Jump to content
Sign in to follow this  
furious Gontran

Requete sur plusieurs tables

Rate this topic

Recommended Posts

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

Share this post


Link to post
Share on other sites
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 :lol:

Share this post


Link to post
Share on other sites

:blush:

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.

Edited by furious Gontran

Share this post


Link to post
Share on other sites

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..

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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. :o

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

Share this post


Link to post
Share on other sites

_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 ?

Share this post


Link to post
Share on other sites

Poste-les ici ou envoie-les moi par MP ;)

L'export total avec structure et données.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...