0

我试图在一个查询中从两个表中获取结果,但问题是我需要 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需要检查posts表中的照片,如果content_id = 0我们必须跳过。

所以photosposts表中有值 0 或 1。

content_id表中activity的 ID/record_number 与帖子中的相同

也许是一个有点令人困惑的问题,但不知道如何解释

4

2 回答 2

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;

注意:我给表名起了别名以减少所需的输入量。

于 2019-04-16T18:41:27.983 回答
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
于 2019-04-16T20:15:25.823 回答