Dus*_*ack 0 php mysql sql innodb
我是SQL的新手,我使用的是MySQL,我有一个包含博客的表.在该表中,我有一个名为"blog_category"的列.我试图从blog_category返回至少出现(n)次的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
Run Code Online (Sandbox Code Playgroud)
我只想返回出现的类别,至少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
Run Code Online (Sandbox Code Playgroud)
以下是我尝试过的一些事情:
$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";
Run Code Online (Sandbox Code Playgroud)
以下是来自其他用户的建议答案,我已经尝试过并且没有运气......
$query = "SELECT blog_category
FROM blog_posts
GROUP BY blog_category
HAVING COUNT(*) >= 3";
Run Code Online (Sandbox Code Playgroud)
这里是完整的代码部分RAN(我在服务器的SQL测试部分直接测试,它运行得很好,但是当我运行实际的完整代码时,它会一直返回,查询为false):
$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>";
}
}
Run Code Online (Sandbox Code Playgroud)
你需要GROUP BY:
SELECT blog_category
FROM blog_posts
GROUP BY blog_category
HAVING COUNT(*) >= 3;
Run Code Online (Sandbox Code Playgroud)
基本上,您永远不应该使用SELECT DISTINCT聚合函数(例如COUNT(*)).只要你有功能,如COUNT(),MIN(),MAX(),等,您应该有一个GROUP BY或者期待正好在结果集中一行.
不可否认,也有例外.在某些数据库中,您可以使用没有聚合等效项的分析函数来执行此操作.这不适用于MySQL.
| 归档时间: |
|
| 查看次数: |
248 次 |
| 最近记录: |