需要用mysql查询结果指导

时间:2013-01-07 03:38:52

标签: mysql

我有两个表,我已经离开了,如下所示,通过ID按降序添加,以便工作正常。

SELECT p.* FROM ruj_users_pad 
AS p LEFT JOIN ruj_users
AS u ON p.user_id = u.id 
WHERE u.status !=0 
AND 1 
AND p.status = 1 
GROUP BY p.added_date
DESC LIMIT 0, 20

但是,现在我想检索第三个表,该表也作为'added_date'列与前一个查询组合以显示新的降序。第三个表格中的数据是当用户点击收藏垫上的当前项目时从按钮生成的。

这是我所拥有的,但它不起作用。

SELECT p.*,f.added_date FROM ruj_users_pad
AS p LEFT JOIN ruj_users 
AS u ON b.user_id=u.id 
LEFT JOIN ruj_users_fave 
AS f ON f.brag_id = u.id 
WHERE u.status !=0 
AND 1 
AND p.status = 1 
GROUP BY f.added_date DESC, b.added_date DESC 
LIMIT 0, 20

结果返回与第一个结果相同的结果。我不明白什么是错的。我希望结果考虑到ruj_users_fave中有一个条目,并将其与第一个结果相结合,以使最喜欢的pad填充到顶部。

非常感谢帮助。

1 个答案:

答案 0 :(得分:1)

以下是使用UNION合并两个子查询的问题的解决方案。它不是三个表的完整查询,而只是两个表的本质来演示这个概念。我使用表pad和表likes。第一个子查询使用idMAX选择垫GROUP BY id及其最近的“喜欢”。请注意,我将列MAX(liked)重命名为timestamp

SELECT pad.id, MAX(liked) AS timestamp FROM
pad INNER JOIN likes WHERE likes.pad_id = pad.id
GROUP BY pad.id

另一个子查询选择尚未被喜欢的打击垫id,即该特定打击垫id中的喜欢表中没有记录。在这种情况下,您提到pad的创建日期应该用于确定返回的记录的顺序。因此,我们将added重命名为timestamp

SELECT id, added AS timestamp FROM pad
WHERE NOT EXISTS
  (SELECT liked FROM likes WHERE likes.pad_id = pad.id)

我们现在有两个子查询返回pad的idtimestamp,因此我们可以使用UNION将它们合并到一个结果集,然后ORDER { {1}}。您的组合查询看起来像这样。

BY timestamp