在PHP中对数组进行排序与​​从SQL中获取数据

时间:2015-09-23 11:36:52

标签: php mysql sql arrays database

我使用以下php方法查找数组中前10个出现的元素,然后返回包含这10个元素的新数组以及它们出现的次数。这适用于相当小的数组。但是我从数据库中获取数据,并且数组的大小可以轻松超过100000。这导致此方法非常慢。代码如下:

function getTopTenSelects($array) {
    $result = [];
    for ($x = 0; $x <= 10; $x++) {
        $count = countArray($array);
        $mostOccuring = (key($count));
        $arrayReturn[$x] = $mostOccuring;
        array_push($result, [$mostOccuring,$count[$mostOccuring]]);
        foreach ($array as $temp) {
            if (($key = array_search($mostOccuring, $array)) !== false) {
                // Cuts the key from the array foreach time it appears so we can find the next most occuring value
                unset($array[$key]);
            }
        }
    }
    return $result;
}

现在。我通过以下SQL查询获取我的数组。 $hashtag是一个包含一段字符串的变量。

SELECT tag_names
FROM soc_stat
JOIN tags on soc_stat.insta_id = tags.insta_id
WHERE main_tag = $hashtag

在php中有没有一种有效的方法,或者有没有办法通过SQL查询获得我需要的东西?

1 个答案:

答案 0 :(得分:4)

当然,您应该只检索数据库中真正需要的数据,以便进行小型数据交换。在您的情况下,前10个标签名称:

SELECT tag_names, count(*)
FROM soc_stat
JOIN tags on soc_stat.insta_id = tags.insta_id
WHERE main_tag = $hashtag
group by tag_names
order by count(*) desc limit 10;