如何检查值是否大于数组中的值

时间:2018-08-24 09:09:21

标签: php mysql arrays

我有以下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的项目,以后再需要其他项目。

5 个答案:

答案 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的行。

  1. 在SQL查询中

__

SELECT item, COUNT(*) as number FROM shop GROUP BY item HAVING number > 9

这将导致您仅从数据库中接收请求的行

  1. 使用PHP过滤-每次您要打印菜单或对其进行测试时,都可以从查询中重新获得数组中的“ number ”值。您还可以分配新数组,并插入所有大于10的' number '值。

答案 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