mysql - 需要mysql查询结果的指导

标签 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”列将其与先前的查询结合起来以显示新的降序。第三个表中的数据是在用户单击以收藏 pad 上的当前项目时通过按钮生成的。

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

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 中有一个条目,并将其与第一个结果结合起来,将最喜欢的垫放在顶部。

非常感谢您的帮助。

最佳答案

这是使用 UNION 合并两个子查询来解决您的问题的方法。它不是三张表的完整查询,而是仅以两张表来展示概念的本质。我使用一个表 pad 和一个表 likes。第一个子查询使用 MAXGROUP BY id 选择 pad 的 id 及其最近的“like”。请注意,我将列 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

另一个子查询选择尚未被点赞的 pad id,即在 likes 表中不存在该特定 pad 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 将它们组合成一个结果集,然后 ORDERBY timestamp。您的组合查询如下所示。

SELECT combined.id, combined.timestamp FROM
(
  SELECT pad.id, MAX(liked) AS timestamp FROM
    pad INNER JOIN likes WHERE likes.pad_id = pad.id
    GROUP BY pad.id
  UNION
  SELECT id, added AS timestamp FROM pad
    WHERE NOT EXISTS
      (SELECT liked FROM likes WHERE likes.pad_id = pad.id)
)
combined ORDER BY combined.timestamp DESC;

关于mysql - 需要mysql查询结果的指导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14189546/

相关文章:

Mysql:在子表中插入一个新行,其中包含从父表获取的外键列以外的新值

mysql - 使用 Group By 连接 2 个表

php - 显示具有数据库值的复选框

php - 如何使用 PHP 和 MySQLi 对照另一个多维数组检查一个多维数组值并根据结果更新批量数据?

mysql - 将托管服务器上的网站连接到我的本地主机 php mysql

mysql - 如何在插入附加值时复制表中的多行

php - 在 PHP/MySQL 中创建周期性日历事件

java - 使用 Log4j2 在 MySQL 中获取语法错误(XML 配置)

php - 返回三个 SQL 表的随机结果

MySQL 从另一个表中插入不重复的内容