【问题标题】:Get two different limits from mysql left join [closed]从mysql左连接获得两个不同的限制[关闭]
【发布时间】:2016-05-20 12:19:49
【问题描述】:

我希望每个类别最多显示 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();
  }

感谢任何示例或 cmets。

【问题讨论】:

  • 您不应该将表 Posts (c_id) 中的类别 ID 与表 Category 中的 cat_id 连接起来吗?见w3schools.com/sql/sql_join.asp
  • 所以谷歌“$results=$mysqli->query”。返回的每个结果都有哪些说明您的代码丢失了?
  • 如果那是你的真实代码;您在query( SELECT 中缺少引号 - 注意语法突出显示?这是一个很大的错字mysqli_fecth_array
  • 嘿雪利酒,你发布的代码。那是你真正在这里使用的吗?那里很少有错别字,有人想在编辑中修复它,我们怎么知道这不是真正的问题?你需要在这里说出来。由于拼写错误,您的问题被投票关闭。
  • 好的,我不在这里了。你们处理这个烂摊子。

标签: php mysql mysqli php-5.6


【解决方案1】:

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

第二部分:

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

【讨论】:

    【解决方案2】:

    select distinct (c.postid) , c.postname, s.category_name from posts c inner join category s on s.cat_id = c.cat_id group by c.cat_id with COUNT(c.cat_id) > 3 limit 3

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-15
      • 2018-07-20
      • 1970-01-01
      • 2016-08-12
      • 2021-09-16
      • 2021-01-06
      • 1970-01-01
      • 2017-07-01
      相关资源
      最近更新 更多