php - mysql 选择不同的行,至少出现 (n) 次

标签 php mysql sql innodb

<分区>

我是 SQL 的新手,我正在使用 MySQL,并且我有一个包含博客的表。在该表中,我有一个名为“blog_category”的列。我正在尝试从出现至少 (n) 次的 blog_category 返回 DISTINCT 值。示例:

    blog_category
    -------------
    category_1
    category_1
    category_2
    category_3
    category_3
    category_4
    category_4
    category_1
    category_1
    category_2
    category_2

我只想返回至少出现 3 次(大于或等于 3 次)的类别。

我可以使用 DISTINCT 关键字让它显示出现不止一次的那些,但我只想要实际出现超过指定次数的那些,在这种情况下只显示至少出现超过一次的那些3次。

所以在这种情况下,我只想返回“category_1”和“category_2”。

我尝试了很多方法,但似乎没有任何效果,我不断收到以下错误:

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean
given in [FILE NAME OMITTED] on line 101 

以下是我尝试过的一些方法:

$query = "SELECT DISTINCT blog_category 
          FROM blog_posts 
          HAVING COUNT (blog_category) >= 3";

$query = "SELECT DISTINCT blog_category 
          FROM blog_posts 
          WHERE blog_category IN
          (SELECT blog_category
          HAVING (COUNT (blog_category) >= 3))";

$query = "SELECT DISTINCT blog_category 
          FROM blog_posts 
          WHERE blog_category 
          HAVING COUNT(blog_category) >= 3";

$query = "SELECT DISTINCT blog_category 
          FROM blog_posts 
          WHERE COUNT(blog_category) >= 3";

以下是来自其他用户的建议答案,我已经尝试过但没有成功......

$query = "SELECT blog_category 
          FROM blog_posts 
          GROUP BY blog_category
          HAVING COUNT(*) >= 3";

这里是正在运行的代码的完整部分(我直接在服务器的 SQL 测试部分进行了测试,它工作得很好,但是当我运行实际的完整代码时,它一直返回查询是错误的):

$query = "SELECT blog_category 
        FROM blog_posts
        GROUP BY blog_category
        HAVING COUNT(*) > 2)";

        $result = mysqli_query( $conn, $query );

        if( mysqli_num_rows( $result ) > 0 ) {
            while( $row = mysqli_fetch_assoc($result) ) {
                echo "<ul>";
                echo "<li>" . $row['blog_category'] . "</p>";
                echo "</ul>";           
            }
        }

最佳答案

你需要GROUP BY:

SELECT blog_category 
FROM blog_posts 
GROUP BY blog_category
HAVING COUNT(*) >= 3;

基本上,您不应该将 SELECT DISTINCT 与聚合函数(例如 COUNT(*))一起使用。每当你有诸如 COUNT()MIN()MAX() 等函数时,你应该有一个 GROUP BY 或期望结果集中只有一行。

诚然,也有异常(exception)。在某些数据库中,您可能会使用没有聚合等价物的分析函数来执行此操作。这不适用于 MySQL。

关于php - mysql 选择不同的行,至少出现 (n) 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46798383/

相关文章:

php - 获取当前数据库名称 - cakephp 3

php - 允许 Shift + Enter 提交表单

php foreach 遍历一个数组并赋值这个数组

mysql - 没有加入mysql的组

mysql - InnoDB 文档 支持事务、行级锁定和外键

mysql - 我可以重命名由内部连接生成的表吗?

php - MysQL 通过查询获取时间

mysql - 根据 mysql 中的最小 id 返回唯一行

PHP从数据库中选择随机ID

mysql - SQL 连接和选择