5个最新话题只有1个回复

问题描述 投票:0回答:1

有两张表,一张用于主题,第二张用于答案。
如何使用 1 个 SQL 查询显示 5 个极端主题,而只有 1 个极端答案。
在这种情况下,新答案应该将主题提升到列表中的更高位置,因为它可以与

DESC
一起使用。

我尝试这样做,但它工作得不太正确:

SELECT `t2`.`date` AS `date`,`t1`.`name` AS `name` 
FROM `quests` 
AS `t1` 
LEFT JOIN `answers` 
AS `t2` 
ON `t2`.`quest_id` = `t1`.`id` 
GROUP BY `t1`.`id` DESC

如何正确执行此操作?

表结构非常简单:

quests

+----+----------------+--------------------------------+------------+
| id | name           | text                           | date       |
+----+----------------+--------------------------------+------------+
|  1 | Quest 1        | Quest 1 Text                   | 1702570100 |
+----+----------------+--------------------------------+------------+
|  2 | Quest 2        | Quest 2 Text                   | 1702570120 |
+----+----------------+--------------------------------+------------+

answers

+----+-----------+-----------------------------+------------+
| id | quest_id  | text                        | date       |
+----+-----------+-----------------------------+------------+
|  1 |         1 | Answer 1                    | 1702570135 |
+----+-----------+-----------------------------+------------+
|  2 |         1 | Answer 2                    | 1702570136 |
+----+-----------+-----------------------------+------------+
|  3 |         2 | Answer 1                    | 1702570137 |
+----+-----------+-----------------------------+------------+
|  4 |         2 | Answer 2                    | 1702570138 |
+----+-----------+-----------------------------+------------+
|  5 |         2 | Answer 3                    | 1702570139 |
+----+-----------+-----------------------------+------------+

结果应该是这样的:

Quest 2
- Answer 3
Quest 1 
- Answer 2

我也尝试这样做:

SELECT `t2`.`date` AS `date`,`t1`.`name` AS `name` 
FROM `quests` 
AS `t1` 
JOIN (SELECT * FROM `answers` ORDER BY `date` DESC) 
AS `t2` 
ON `t2`.`quest_id` = `t1`.`id` GROUP BY `t1`.`id` DESC LIMIT 5

没有任何结果。

sql mysql-5.7
1个回答
0
投票

您需要从表答案中找到每个 quest_id 的最新答案:

SELECT quest_id, MAX(date) AS latest_date
FROM answers
GROUP BY quest_id

然后将此数据集加入表答案和任务以获得预期输出:

SELECT q.name AS Question, a.text AS answer
FROM quests AS q
INNER JOIN answers a ON a.quest_id = q.id
INNER JOIN (
  SELECT quest_id, MAX(date) AS latest_date
  FROM answers
  GROUP BY quest_id
) AS s on s.quest_id = a.quest_id and a.`date` = s.latest_date
ORDER BY q.id DESC
LIMIT 5;

结果:

Question    |answer
------------|----------
Quest 2     |Answer 3
Quest 1     |Answer 2

演示在这里

© www.soinside.com 2019 - 2024. All rights reserved.