Recherche match avec clefs fulltext sur plusieurs tables

  • Auteur de la discussion Auteur de la discussion DuClik
  • Date de début Date de début
Nouveau WRInaute
Bonjour,

j'aimerai faire une recherche en Mysql sur des colonnes avec index FULLTEXT, sur plusieurs tables à la fois.

Ceci par exemple, ne fonctionne pas :


Code:
SELECT c.*, MATCH (c.nom, c.email, s.url) AGAINST ('test') AS Score FROM clients as c, sites as s ORDER BY score DESC

Comment faire pour piocher dans plusieurs tables ?

Merci d'avance, bonne soirée.
Clem
 
WRInaute impliqué
et encore dans ma version 5.0.32
Code:
#1347 - 'tutu' is not BASE TABLE
lors de la création d'index full text
à checker dans les nouvelles versions...
a+
 
WRInaute impliqué
ca ok
Code:
SELECT c.* FROM clients as c, sites as s where c.nom like '%test%' OR c.email like '%test%' OR s.url like '%test%' ORDER BY score DESC
ou tu réorganises tes tables au choix
 
WRInaute discret
Bonjour,

Bon le Post est vieux, mais cela peut servir :wink:

Moi j'ai fait une union sur différents SELECT qui reprenaient les mêmes champs avec les liaisons dans les tables qui s'imposent (ici une seule), mais les MATCH sont différents, ils sont en fonction des champs FULLTEXT de chaque table.
Au niveau performance je ne sais pas ce que cela vaut ... Mais au niveau résultat c'est cohérent :

Ne faites pas attention aux noms de mes champs, mais la structure de la requête :

Code:
SELECT * FROM
(SELECT nom_produit, ref_produit,nom_marque, MATCH(nom_produit, ref_produit) AGAINST('disque frein malossi 0901BI0230') AS score 
FROM tb_scoot_produit,tb_scoot_marque 
WHERE MATCH(nom_produit, ref_produit) AGAINST('disque frein malossi 0901BI0230') 
AND 
marque_produit = id_marque

UNION

SELECT nom_produit, ref_produit,nom_marque, MATCH(nom_marque) AGAINST('disque frein malossi 0901BI0230') AS score
FROM tb_scoot_produit,tb_scoot_marque 
WHERE MATCH(nom_marque) AGAINST('disque frein malossi 0901BI0230') 
AND 
marque_produit = id_marque
) 
a ORDER BY score DESC

Voici les 5 première lignes de résultats chez moi :
  • nom_produit / ref_produit / nom_marque / score

    - Disque de frein conti 215mm booster or / 0901BI0230 / Conti / 15.2910709381104 (premier car Ref dans la requête!)

    - Disque de frein av malossi piaggio x8 / mal6212352 / malossi / 11.6192064285278

    - Disque de frein ar majesty skyliner 125 / FEM852 / DIVERS / 7.72076940536499

    - Disque de frein av skyliner majesty / FEM484 / DIVERS / 7.72076940536499

    - Disque frein tnt racing 4 trous d190 / 282002D / TNT Racing / 7.63771152496338



'a' dans le ORDER BY cela correspond à la table temporaire qui est créée par le UNION

Voilà :D
 
Discussions similaires
Haut