我这里有个问题。我有 3 个表,即 tbl_ads、tbl_ps、tbl_dealer
tbl_ads ( ad_id, ad_type, poster_id, cat, title, description, images ... , ad_status )
tbl_ps ( ps_id, name , address, city, state )
tbl_dealer ( id, name , address, city, state, pack, bussname )
现在我想根据 tbl_ads
中的 title
、description
搜索广告,但我想根据 搜索广告>city
和 state
根据 tbl_ads 在不同的表中
基本上在这里,我想获得广告,如果 ad_type = 'ps'
然后从 tbl_ps
和 if ad_type = 'dealer'
然后从 tbl_dealer .. 表 ad
和 ps
之间的关系是 tbl_ps.ps_id = poster_id
和表 ad
和 dealer
之间的关系是tbl_dealer.id = poster_id
问题是我想根据广告 title
、广告 description
、city
和 state
搜索广告> 并得到 tbl_ads 记录的合并结果,可能是 ps 或经销商
城市和州同时存在于 ps 和 dealer 表上
我已经尝试了所有的多重连接、联合以及我从这个堆栈溢出中得到的所有东西。我实际上并没有得到我想要的东西,它真的很糟糕。
最佳答案
也许是这样的。
SELECT ad_id,ad_type,poster_id,cat,title,description,images,ad_status,
IF (ad_type = 'ps', ps.name, dealer.name) as name,
IF (ad_type = 'ps', ps.address, dealer.address) as address,
IF (ad_type = 'ps', ps.city, dealer.city) as city,
IF (ad_type = 'ps', ps.state, dealer.state) as state,
IF (ad_type = 'ps', NULL, dealer.pack) as pack,
IF (ad_type = 'ps', NULL, dealer.bussname) as bussname
FROM tbl_ads ads
LEFT JOIN tbl_ps ps ON (ps.ps_id = ads.poster_id)
LEFT JOIN tbl_dealer dealer ON (dealer.id = ads.poster_id)
然后搜索你可以使用这样的东西
SELECT ad_id,ad_type,poster_id,cat,title,description,images,ad_status,
IF (ad_type = 'ps', ps.name, dealer.name) as _name,
IF (ad_type = 'ps', ps.address, dealer.address) as _address,
IF (ad_type = 'ps', ps.city, dealer.city) as _city,
IF (ad_type = 'ps', ps.state, dealer.state) as _state,
IF (ad_type = 'ps', NULL, dealer.pack) as _pack,
IF (ad_type = 'ps', NULL, dealer.bussname) as _bussname
FROM tbl_ads ads
LEFT JOIN tbl_ps ps ON (ps.ps_id = ads.poster_id)
LEFT JOIN tbl_dealer dealer ON (dealer.id = ads.poster_id)
WHERE title LIKE '%tit%'
OR description LIKE '%crip%'
HAVING _city LIKE '%Yorba%'
OR _state LIKE '%Cali%'
检查这个sqlFiddle
这是一个非常基本的搜索,搜索可能会变得非常激烈,例如匹配标题相对于匹配描述的顺序,以及标题中有多少匹配词等。
关于php - 使用 UNION JOIN 从多个用户类型中选择项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20810739/