我使用以下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查询获得我需要的东西?
答案 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;