Mysql 每一个最后三个
我需要得到10条最新消息,每一条都有3条评论。 我提出两个问题: 1为用户获取10条最新消息Mysql 每一个最后三个,mysql,sql,Mysql,Sql,我需要得到10条最新消息,每一条都有3条评论。 我提出两个问题: 1为用户获取10条最新消息 SELECT * FROM news WHERE o_uid = 17 AND o_cid = 0 ORDER BY time DESC LIMIT 10 2在此之后,我希望在一个查询中获得每个选定新闻的所有评论。我通过设置新闻ID来检索评论。 我写的是: SELECT c.* FROM `comments` AS c WHERE c.`id` >= Ifnull(
SELECT *
FROM news
WHERE o_uid = 17
AND o_cid = 0
ORDER BY time DESC
LIMIT 10
2在此之后,我希望在一个查询中获得每个选定新闻的所有评论。我通过设置新闻ID来检索评论。
我写的是:
SELECT c.*
FROM `comments` AS c
WHERE c.`id` >= Ifnull(
(SELECT Min(s.id)
FROM
(SELECT id
FROM comments
WHERE nid = c.nid
ORDER BY id DESC LIMIT 3) AS s), ~ 0)
AND c.`nid` IN ('17',
'16')
但这不适用于“where子句”中的错误未知列“c.nid”。通过此子查询,我希望检索每个新闻的3条最后评论id中的最小id,并且在我获得所有评论id>=所选id 3 last的评论之后。
请帮我检索每个新闻的最后三条评论。谢谢。考虑以下几点
DROP TABLE IF EXISTS news;
CREATE TABLE news(news_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
INSERT INTO news VALUES (1),(2),(5),(6),(7),(9);
DROP TABLE IF EXISTS comments;
CREATE TABLE comments(comment_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, news_id INT NOT NULL);
INSERT INTO comments (news_id) VALUES
(2),(2),(5),(6),(3),(3),(7),(9),(9),(9),(7),(2),(3),(9);
SELECT * FROM news;
+---------+
| news_id |
+---------+
| 1 |
| 2 |
| 5 |
| 6 |
| 7 |
| 9 |
+---------+
SELECT * FROM comments;
+------------+---------+
| comment_id | news_id |
+------------+---------+
| 1 | 2 |
| 2 | 2 |
| 3 | 5 |
| 4 | 6 |
| 5 | 3 |
| 6 | 3 |
| 7 | 7 |
| 8 | 9 |
| 9 | 9 |
| 10 | 9 |
| 11 | 7 |
| 12 | 2 |
| 13 | 3 |
| 14 | 9 |
+------------+---------+
SELECT n.*
, c.*
FROM news n
LEFT
JOIN
( SELECT x.*
FROM comments x
JOIN comments y
ON y.news_id = x.news_id
AND y.comment_id >= x.comment_id
GROUP
BY x.news_id
, x.comment_id HAVING COUNT(*) <= 3
) c
ON c.news_id = n.news_id;
+---------+------------+---------+
| news_id | comment_id | news_id |
+---------+------------+---------+
| 1 | NULL | NULL |
| 2 | 1 | 2 |
| 2 | 2 | 2 |
| 2 | 12 | 2 |
| 5 | 3 | 5 |
| 6 | 4 | 6 |
| 7 | 7 | 7 |
| 7 | 11 | 7 |
| 9 | 9 | 9 |
| 9 | 10 | 9 |
| 9 | 14 | 9 |
+---------+------------+---------+
这就是答案。那你呢。