php - 使用 UNION JOIN 从多个用户类型中选择项目

标签 php mysql join

我这里有个问题。我有 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 中的 titledescription 搜索广告,但我想根据 搜索广告>citystate 根据 tbl_ads 在不同的表中

基本上在这里,我想获得广告,如果 ad_type = 'ps' 然后从 tbl_psif ad_type = 'dealer'然后从 tbl_dealer .. 表 adps 之间的关系是 tbl_ps.ps_id = poster_id 和表 addealer 之间的关系tbl_dealer.id = poster_id

问题是我想根据广告 title、广告 descriptioncitystate 搜索广告> 并得到 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/

相关文章:

mysql - mysql连接的左边是什么?

mysql - 连接三个表以便丢弃额外的匹配项?

php - PDO try-catch 在函数中的使用

php - mysql 中非常奇怪的错误。与搜索匹配是有效的,但对它来说是无效的

php - 将树状对象结构转换为数组并交互整个事物

MySql count(*) 超慢并发查询

php - Laravel:具有关系的查询构建器

php - 在php中单击按钮即可备份Mysql数据库

Mysql order by subquery id : where a. id = b.id,orders by b.id,查询不应该排序,但确实如此

mysql - 尝试通过 SQL JOIN 将 "add"一列添加到表中