2015-09-23 4 views
0

Я использую следующий метод php, чтобы найти 10 лучших элементов в массиве, а затем возвращать новый массив с этими 10 элементами вместе с тем, сколько раз они появляются. Это хорошо для небольших массивов. Но я получаю данные из базы данных, а массивы могут быть более 100000. Это заставляет этот метод быть чрезвычайно медленным. Код выглядит следующим образом:Сортировка массива в PHP и выборка данных из SQL

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

В какой таблице находятся теги «tag_names» и «main_tag»? –

ответ

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; 
+0

О, боже, большое вам спасибо. Я начинаю больше нравиться SQL. К сожалению, я нахожу все больше и больше кода, который я написал, что совершенно бесполезно. По крайней мере, я учился на своих ошибках :) –

Смежные вопросы