我试图在一个查询中从两个表中获取结果,但是问题是我需要where子句中的两个表中的列- 例子
SELECT activity.*,
(
SELECT photos
FROM posts
WHERE activity.content_id = posts.record_number
) as p
FROM activity
WHERE activity.liked_post > 0 OR activity.comments > 0 OR p > 0
ORDER BY date DESC
LIMIT 0,10
此示例不起作用。我不知道如何使此查询工作。如果p = 0
应该跳过记录,但是content_id
可以是0或任何数字,如果content_id > 0
然后需要检查帖子表中的照片,如果content_id = 0
必须跳过。 / p>
因此photos
表中的posts
的值为0或1。
content_id
表中的 activity
与帖子中的ID / record_number相同
也许是一个令人困惑的问题,但不知道如何解释
答案 0 :(得分:1)
使用联接而不是对照片进行子选择。查询中的p> 0通过使用联接来处理。结果中仅包含有照片的行。
这应该返回您期望的行:
SELECT a.*,
p.photos
FROM activity a
LEFT JOIN posts p
ON a.content_id = p.record_number
WHERE (a.liked_post > 0 OR a.comments > 0)
AND (a.content_id = p.record_number AND content_id > 0)
OR liked_post > 0)
ORDER BY date DESC
LIMIT 0,10;
注意:我为表名加了别名,以减少所需的键入量。
答案 1 :(得分:0)
找到解决方案
SELECT a.*,
p.photos
FROM activity a
LEFT JOIN content p ON a.content_id = p.record_number
WHERE (a.friend_with > 0
OR a.liked_post > 0
OR a.comments > 0)
OR (a.content_id = p.record_number
AND photos > 0)
ORDER BY date DESC
LIMIT 0,10