我有以下SQL语句:
$query = "SELECT item, COUNT(*) as number FROM shop GROUP BY item";
这将给我以下结果:
item number
item1 23
item2 15
item3 4
我想用它来制作菜单项,因此通常菜单看起来如下:
item1
item2
item3
但是我想检查一个项目是否少于10条记录,我不想显示该项目。
因此在此示例中,菜单将类似于:
item1
item2
有什么想法要实现吗?
我想在PHP中执行此操作,因为我需要查询中的所有项目,但只想显示大于10的项目,以后再需要其他项目。
答案 0 :(得分:3)
如果要使用PHP进行此操作,则可以这样做
function filterArray($value){
return ($value.number > 10);
}
$filteredArray = array_filter($yourDBArray, 'filterArray');
foreach($filteredArray as $k => $v){
//your desired array
}
就速度而言,如上所述,Mysql选项是好的。
答案 1 :(得分:1)
只需更改您的查询
SELECT item, COUNT(*) as number FROM shop GROUP BY item
到
SELECT item, COUNT(*) as number FROM shop GROUP BY item HAVING number>=10
答案 2 :(得分:0)
有两个用于过滤数据的选项,因此只会显示大于10的行。
__
SELECT item, COUNT(*) as number FROM shop GROUP BY item HAVING number > 9
这将导致您仅从数据库中接收请求的行
答案 3 :(得分:0)
我注意到php被标记了。出于选择的考虑,如果您要从数据库中按原样获取数据,这就是我将如何分离php中不需要的数据的方法:
foreach ($data as $item) {
$num = (int) $item['number']; // force of habit
if ($num >= 10) {
// display it
}
}
我可能会在数据库步骤中分离数据,但是如果这是您要采用的路线,则可以使用此方法。
答案 4 :(得分:0)
由于您确实需要在PHP中执行此操作,因此可以使用array_filter()
,它会使用closure删除number
小于10的项目:
$more_than_ten = array_filter($items, function ($i) { return $i['number'] >= 10; });
使用SQL这样做会是一个更好的解决方案(关于性能)。如果需要,可以使用HAVING
子句(不能执行WHERE number >= 10
):
SELECT
item,
COUNT(*) as number
FROM shop
GROUP BY item
HAVING number >= 10