php - MySQL 高级选择查询检查另一个表中的数据

标签 php mysql sql

我有一个数据库,我正在努力对其进行查询。主表是people,我想要做的是将favourites中的id添加到选择查询的末尾仅当 client_member_id 匹配时才显示 表。

这个想法是循环遍历每个 People 行,并在该行末尾添加 f.id(如果该人员 id 在收藏夹中) 表并且它与 client_member_idid 相匹配。

client_member_id 是给每个客户的 ID,这样当他们收藏某个人时,详细信息就会放入收藏夹表中。这可以是 12。在 SQLFiddle 示例中,当 client_member_id2 时,FAVE_ID 的预期输出将为 68 69 但如果 client_member_id1FAVE_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

SQLFiddle

提前谢谢您。

最佳答案

您可以使用 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_idfave,NOT NULL 和 1,但如果您如果某个人没有相应的收藏夹,那么您会得到 fave_idfave、NULL 和 0。

关于php - MySQL 高级选择查询检查另一个表中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25324035/

相关文章:

php - curl :(6)无法解析主机

mysql - 如何从mysql连接下载数据

mysql - 如何在MySQL中查找相似的IP?

python - SQLAlchemy 子字符串在字符串中

sql - 在选择的 CASE 中检查 NULL

php - 如何使用 php 加密大文件并通过命令行解密?

php - 我需要从两个表中拉入一个循环并匹配数据

java - 获取所选项目的位置...?

php - 如何添加php环境变量?

mysql - SQL:联合 2 个表,然后连接另一个表。有更好的方法吗?