Forum Clubic

Requête sur 2 tables

Bonjour, j’ai deux tables et je cherche à faire une requête qui prenne en compte les 2. Je m’explique :
j’ai deux tables :
tbl_personnes et tbl_alias.
Dans tbl_personnes j’ai plusieurs champs (id, nom, adresse, ville) et dans tbl_alias j’ai juste (id, nom).
Je voudrais que quand on cherche “Philippe Durand”, ça cherche dans les deux tables à la fois (dans le champ non à chaque fois) et que ça me sorte les infos adresse et ville. Je ne sais faire ça que pour une seule table :
SELECT adresse, ville, MATCH (nom) AGAINST (‘Philippe Durand’ IN BOOLEAN MODE) AS cpt FROM tbl_personnes;
Or, je voudrais que s’il trouve le nom dans tbl_alias, il renvoie les infos de tbl_personnes grâce à l’id (l’id correspondant dans la base tbl_personnes).

J’utilise match against car je veux qu’il me sorte le résultat le plus proche à chaque fois, même quand ce n’est pas exactement le même (quand par exemple, il y a inversion du prénom et du nom, etc…).
Comme vous l’aurez compris, il s’agit d’un annuaire.

Je vous remercie d’avance pour toute aide !

arf, modèle de M… :smiley:

Bon, à mon sens, si tu veux que tout s’exécute en une seule requête SQL, il n’y a que l’UNION. Sans les MATCH, ça fait un truc du type :

(SELECT adresse, ville FROM tbl_personnes WHERE nom = ‘toto’)
UNION
(SELECT adresse, ville FROM tbl_personnes, tbl_alias WHERE tbl_alias = ‘toto’ and tbl_alias.id = tbl_personnes.id)

Je te laisse reformuler avec les join, et ajouter le bon nom (nom ou alias dans le second, hein ? :wink: )

Salut,

Le truc, c’est qu’il faut donner priorité à l’alias si j’ai bien compris?

Je verrais plutôt un truc du genre :

SELECT p.adresse, p.ville, IF( a.nom IS NOT NULL , a.nom , p.nom) AS cpt
FROM tbl_personnes p
LEFT JOIN tbl_alias a ON p.id=a.id AND (MATCH (a.nom) AGAINST (‘Philippe Durand’ IN BOOLEAN MODE) > 1)
WHERE
a.nom IS NOT NULL
OR
(MATCH (p.nom) AGAINST (‘Philippe Durand’ IN BOOLEAN MODE) > 1)

(en mettant le niveau de pertinance qu’on veux)
Edité le 22/04/2009 à 17:04