[英]Order results by count of that row
我正在尝试创建一个函数,它将显示我设置的行Y的前X个结果,对于此实例,我使用行浏览器和我的表统计信息中的前5个结果,其中只是为了消除搜索出现Bot结果。 我也希望它返回行数的计数。 所以说浏览器'Safari'有10个结果,那么它将返回该结果的10个数以及结果本身。
$display->show_list('statistics', 'browser', '5', 'WHERE browser!=\'Search Bot\'');
这是我的功能。 如果查询失败,我会清理一下以删除某些检查和输出等。
function show_list($table, $row, $limit = 5, $where = NULL) {
$item = mysql_query("SELECT DISTINCT $row FROM $table $where LIMIT $limit");
$result = array();
while ($fetch = mysql_fetch_array($item)) {
$result[] = $fetch;
}
return $result;
}
我不确定我理解这个问题,但是在SQL查询中使用group by
子句会怎么样:
select your_column, count(*)
from your_table
where ...
group by your_column
order by count(*) desc
limit 5
那会得到你:
your_column
每个值, your_column
的5个值, your_column
值具有最大的行数 改变这一行:
$item = mysql_query("SELECT $row, count(*) as rows FROM $table $where GROUP BY count(*) ORDER BY count(*) DESC LIMIT $limit");
执行此操作后,您可能不希望将其与通用show_list
函数混合使用。
一个随机的说明。 DISTINCT在数据库上往往有些昂贵。 我会避免默认这样做。
顺便说一句,你的缩进是有趣的。 没有合适的程序员会想要使用该代码而无需重新格式化为某些一致的缩进方案。 关于格式化的最佳方法存在无穷无尽的争论,但以下是对原始代码的合理缩进:
function show_list($table, $row, $limit = 5, $where = NULL) {
$item = mysql_query("SELECT DISTINCT $row FROM $table $where LIMIT $limit");
$result = array();
while ($fetch = mysql_fetch_array($item)) {
$result[] = $fetch;
}
return $result;
}
function show_list($table, $column, $limit = 5, $where = '') {
$item = mysql_query("SELECT $column, COUNT(*) AS c FROM $table $where
GROUP BY $column ORDER BY c LIMIT $limit");
$result = array();
while ($fetch = mysql_fetch_array($item)) {
$result[] = $fetch;
}
return $result;
}
row
与column
-我们实际上是在变量传递列名。 $where = ''
替换$where = null
- 即使$where
为null
,它也将确保查询正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.