Создать массив количества записей с запросом

DB::table('visitors')
        ->join('event_visitor', 'visitors.id', '=', 'event_visitor.visitor_id')->where('sex', 0)
        ->where('event_visitor.event_id', 1)
        ->count();

это запрос для получения количества мужчин за столом посетителя с идентификатором события 1

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

$men = [100, 200, 300 ,400,500,600,700,800,900,1000];
$women = [100, 200, 300 ,400,500,600,700,800,900,1000];
$kids = [100, 200, 300 ,400,500,600,700,800,900,1000];

есть ли способ сделать это в базе данных, не попадая в проблему n+1?

0 = men
1 = women
2 = kids
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
72
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Не знаю о laravel, но в MySQL вы можете написать запрос вроде

SELECT visitors.sex, event_visitor.event_id, count(*) as num_visits
  FROM visitors INNER JOIN event_visitor ON visitors.id = event_visitor.visitors_id
 WHERE event_visitor.event_id IN (1, 10, 15, 21, 25, 28, 30, 48, 59, 61)
 GROUP BY visitors.sex, event_visitor.event_id;

Цифры, указанные после ключевого слова IN, представляют собой десять примеров идентификаторов событий, для которых вы хотите получить результат. Обратите внимание, что здесь учитываются посещения, а не посетители. Если вы хотите подсчитать отдельных посетителей, вы можете count(DISTINCT visitors.id).

привет, есть ли способ сделать это быстрее, размер моей таблицы посетителей теперь составляет 600 КБ, а загрузка запроса занимает 2 секунды

Abdoullah al-hajj 31.10.2022 12:23

@ Abdoullahal-hajj, вы должны задать новый вопрос и включить такие вещи, как структура вашей таблицы, индексы и вывод инструкции EXPLAIN.

Mihe 31.10.2022 12:28

ответ будет таким в laravel

DB::table('visitors')
        ->select('visitors.sex', 'event_visitor.event_id', DB::raw('count(*) as num_visits'))
        ->join('event_visitor','visitors.id','=','event_visitor.visitor_id')
        ->whereIn('event_visitor.event_id',[1,2,3,4,5])
        ->groupBy('visitors.sex','event_visitor.event_id')
        ->get();

Другие вопросы по теме