Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP&;MySQL:对数组中最常用的值进行计数和排序,然后打印_Php_Mysql_Count - Fatal编程技术网

PHP&;MySQL:对数组中最常用的值进行计数和排序,然后打印

PHP&;MySQL:对数组中最常用的值进行计数和排序,然后打印,php,mysql,count,Php,Mysql,Count,我想按数组中某个值出现的次数对数组进行排序,然后只打印最高的6个结果 这就是我目前的情况: $delimiter = " "; $tags = array(); $sql = mysql_query("SELECT tags FROM share WHERE site_id = $id"); while($result = mysql_fetch_assoc($sql)) { $tags_new = ex

我想按数组中某个值出现的次数对数组进行排序,然后只打印最高的6个结果

这就是我目前的情况:

        $delimiter = " ";
        $tags = array();

        $sql = mysql_query("SELECT tags FROM share WHERE site_id = $id");

        while($result = mysql_fetch_assoc($sql)) {
            $tags_new = explode($delimiter, $result['tags']);
            $tags = array_merge($tags , $tags_new);
        }

您可以通过以下查询在MySQL中执行此操作:

SELECT tags, COUNT(tags) AS tag_count
FROM share WHERE site_id = $id
GROUP BY tags
ORDER BY tag_count DESC
LIMIT 6;

这将选择计数最高的前6个标签。然后,您可以像已有的PHP代码一样对它们进行循环。

您可以通过以下查询在MySQL中执行此操作:

SELECT tags, COUNT(tags) AS tag_count
FROM share WHERE site_id = $id
GROUP BY tags
ORDER BY tag_count DESC
LIMIT 6;

这将选择计数最高的前6个标签。然后,您可以像已有的PHP代码一样对它们进行循环。

哼。。。你可以这样做:

    while($result = mysql_fetch_assoc($sql)) {
        $tags_new = explode($delimiter, $result['tags']);
        foreach($tags_new as $tag){
            $tags[$tag]++;
        }
    }
之后,需要使用函数
sort
rsort
(desc)按值排序

最后,您需要切片,只需先获得6个:

    $high_tags = array_slice($tags, 0, 6, true);
编辑:显示键和值:

    foreach($high_tags as $key => $value){
        echo "{$key}: {$value}";
    }
或者干脆做:

    $high_keys = array_keys($high_tags);

    var_dump($high_keys);

再见:)

哼。。。你可以这样做:

    while($result = mysql_fetch_assoc($sql)) {
        $tags_new = explode($delimiter, $result['tags']);
        foreach($tags_new as $tag){
            $tags[$tag]++;
        }
    }
之后,需要使用函数
sort
rsort
(desc)按值排序

最后,您需要切片,只需先获得6个:

    $high_tags = array_slice($tags, 0, 6, true);
编辑:显示键和值:

    foreach($high_tags as $key => $value){
        echo "{$key}: {$value}";
    }
或者干脆做:

    $high_keys = array_keys($high_tags);

    var_dump($high_keys);

再见:)

PS:我同意杰森的回答。对于大的结果(以及优化),它比我的要好。谢谢,但是在回顾之后,我认为OP不会以关系方式存储
标记。所以你的答案可能是他们必须使用的。感谢迄今为止的帮助。此时,您上面提供的代码正在打印值出现的次数,而不是值本身。您需要获取密钥。我编辑了我的代码以供您理解。:)附言:我同意杰森的回答。对于大的结果(以及优化),它比我的要好。谢谢,但是在回顾之后,我认为OP不会以关系方式存储
标记。所以你的答案可能是他们必须使用的。感谢迄今为止的帮助。此时,您上面提供的代码正在打印值出现的次数,而不是值本身。您需要获取密钥。我编辑了我的代码以供您理解。:)我需要做哪些更改才能使其正常工作?您需要以更相关的方式存储
标记。因此,与其在一个记录中存储多个标记,不如将每个标记存储在多个记录中。然后,您就可以使用上面的查询和其他查询来确定统计信息。为了使其正常工作,我需要做哪些更改?您需要以更相关的方式存储
标记。因此,与其在一个记录中存储多个标记,不如将每个标记存储在多个记录中。然后您就可以使用上面的查询和其他查询来确定统计信息。