Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 每一个最后三个_Mysql_Sql - Fatal编程技术网

Mysql 每一个最后三个

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(

我需要得到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 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 |
 +---------+------------+---------+

这就是答案。那你呢。