我有一个数据库,我正在努力对其进行查询。主表是people
,我想要做的是将favourites中的
表。id
添加到选择查询的末尾仅当 client_member_id
匹配时才显示
这个想法是循环遍历每个 People
行,并在该行末尾添加 f.id
(如果该人员 id 在收藏夹中)
表并且它与 client_member_id
的 id
相匹配。
client_member_id
是给每个客户的 ID,这样当他们收藏某个人时,详细信息就会放入收藏夹表中。这可以是 1
或 2
。在 SQLFiddle 示例中,当 client_member_id
为 2
时,FAVE_ID
的预期输出将为 68
69
但如果 client_member_id
为 1
则 FAVE_ID
都将为 null
我已经达到了似乎重复行的程度,并且我需要它是不同的。
SELECT *, j.company_id as companyid, j.id as jid, p.id as pid,
(CASE WHEN f.client_member_id = 2 AND p.id = f.people_id THEN f.id ELSE null END) AS fave_id,
(CASE WHEN f.client_member_id = 2 AND p.id = f.people_id THEN 1 ELSE 0 END) AS fave
FROM people p
INNER JOIN favourites f
INNER JOIN job j
ON p.job_id = j.id
WHERE p.company_id = 1
ORDER BY p.id ASC
提前谢谢您。
最佳答案
您可以使用 LEFT JOIN 到收藏夹来摆脱笨拙的 CASE:
SELECT *,
j.company_id companyid,
j.id jid,
p.id pid,
f.id fave_id,
f.id IS NOT NULL fave
FROM people p
INNER JOIN job j
ON p.job_id = j.id
LEFT JOIN favourites f
ON f.people_id=p.id
AND f.client_member_id=2
WHERE p.company_id = 1
ORDER BY p.id ASC
N.B 这只会为您的 fiddle 返回两行 fave_id
和 fave
,NOT NULL 和 1,但如果您如果某个人没有相应的收藏夹,那么您会得到 fave_id
和 fave
、NULL 和 0。
关于php - MySQL 高级选择查询检查另一个表中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25324035/