2009-08-31 5 views
1

J'ai trois tables d'information dans lesquelles le business_id est le dénominateur commun. J'ai deux champs de saisie, un pour la recherche générale (les utilisateurs peuvent rechercher ce qu'ils veulent) et une entrée zip. Du côté php, j'attrape la chaîne de recherche générale et la règle sur $search et le zip sur $zip.Recherche de texte sur plusieurs tables par rapport à deux variables php

Comment puis-je utiliser la variable $search à MATCH l'un des textes intégraux ees, puis limite les matchs en utilisant le $zippuis retour que l'ID de la table c?

Ma structure de base de données est ci-dessous:

table coup 
    id << this is the my desired information from the search 
    timestamp 
    business_id 
    coupvalue 
    startdate 
    enddate 
    username 
    status 
    terms 
    image 
    description 
     primary = id 
     fulltext = name 
table bloc 
    id 
    address 
    city 
    state 
    zip 
    business_id 
    phone 
    lat 
    lon 
     primary = id 
table bus 
    business_id 
    name 
    timestamp 
    category 
    subcat 
     primary = business_id 
     fulltext = name,category,subcat 

Toute aide serait appréciée!

Répondre

0

Vous pouvez utiliser une condition or avec les matches:

select 
    c.id 
from 
    coup c 
    inner join bus b on 
     c.business_id = b.business_id 
    inner join block z on 
     c.buisness_id = z.business_id 
    where 
     (match(c.name) against ('$search') 
     or match (b.name, b.category, b.subcat) against ('$search')) 
     and z.zip = '$zip' 

Je ne l'ai pas benchmarkée, mais cela pourrait être plus rapide:

select 
    c.id 
from 
    (select id, business_id 
    from coup 
    where match(name) against ('$search') 
    ) as c 
    left join 
     (select business_id 
     from bus 
     where match(name, category, subcat) against ('$search') 
     ) as b on 
     c.business_id = b.business_id 
    inner join bloc z on 
     c.business_id = z.business_id 
where 
    z.zip = '$zip' 
+0

Je voudrais ajouter c.name , b.category, b.subcat au match aussi bien. –

+0

Les recherches en texte intégral ne fonctionnent que sur leurs indices respectifs. Vous ne pouvez pas faire un index de texte intégral multi-table, dans la mesure où je sais. – Eric

Questions connexes