从mysql left join

时间:2016-05-20 12:19:49

标签: php mysql mysqli php-5.6

我希望每个类别最多显示3个帖子。另外我想检查每个类别至少有3个帖子(得到帖子数)。请参阅下面的表担架

类别表

+---------+---------------+
| cat_id  | cat_name      |
+---------+---------------+
|       1 | cat name 1    |
|       2 | cat name 2    |
|       3 | cat name 3    |
+---------+---------------+

帖子表

+------+--------+-------+
| p_id | post   | c_id  |
+------+--------+-------+
|    1 | post 1 |   1   |
|    2 | post 2 |   1   |
|    3 | post 3 |   2   |
|    4 | post 1 |   2   |
|    5 | post 2 |   1   |
|    6 | post 3 |   3   |
|    6 | post 3 |   1   |
+------+--------+-------+

查询

if($results=$mysqli->query( SELECT * FROM categories LEFT JOIN posts ON posts.p_id= categories.cat_id WHERE posts.p_id= categories.cat_id ORDER BY cat_id LIMIT 0, 10")){
    while($row = mysqli_fecth_array($results)){
         //Do stuff
      }
    $results ->close();
  }

赞赏任何示例或评论。

2 个答案:

答案 0 :(得分:1)

在MySQL和理智的查询中,不可能从每个类别获得最多3个帖子。你需要支持窗口函数。我会为每个类别预先形成一个单独的查询。您可以在此标记中阅读简短信息:https://stackoverflow.com/tags/window-functions/info

第二部分:

SELECT c_id, COUNT(*) FROM posts GROUP BY c_id;

答案 1 :(得分:0)

从c.cat_id = c.cat_id组中的帖子c内部联接类别中选择distinct(c.postid),c.postname,s.category_name c.cat_id具有COUNT(c.cat_id)> 3限制3