выбрать топ-10 по общей сумме в mysql таблице - PullRequest
0 голосов
/ 25 мая 2020

У меня есть MySQL таблица, как показано ниже

id, name, postcode, address

в моем, почтовый индекс таблицы будет таким

AX12 3NB
NB76 5BQ
AX23 6NB
AX87 6CZ

Я хочу получить 10 лучших почтовых индексов в целом, как начало почтового индекса с AX появляется 3 раза

У меня есть проект Laravel, и я хочу использовать этот синтаксис

DB::table('users')

Я хочу получить общее количество любых первых двух букв почтового индекса и только верхних 10 записей.

Спасибо

Ответы [ 2 ]

1 голос
/ 25 мая 2020

Сначала получите все записи, затем используйте PHP для сортировки и уменьшения размера массива. Лучше всего это сделать с помощью необработанного запроса, но, поскольку вы указали выше, что не хотите использовать необработанный запрос, это быстрый способ его обработать.

$users = DB::table('users')->get();
$postcodes_array = [];
foreach ($users as $user) {
    $first_two = substr($user->postcode, 0, 2);
    if (isset($postcodes_array[$first_two])) {
        $postcodes_array[$first_two] += 1;
    } else {
        $postcodes_array[$first_two] = 1;
    }
}
arsort($postcodes_array);
$postcodes_array = array_slice($postcodes_array, 0, 10);
0 голосов
/ 25 мая 2020

$ data = DB :: table ('users') -> select (DB :: raw ('count (postcode) as Occurences'), DB :: raw ('substring (postcode, 1, 2) as top ')) -> groupBy (' top ') -> orderBy (' occurences ',' des c ') -> limit (10) -> get (); Это работает только с DB :: raw

, но я ищу версию без DB :: raw, спасибо, всем за помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...