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, но в 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).
@ Abdoullahal-hajj, вы должны задать новый вопрос и включить такие вещи, как структура вашей таблицы, индексы и вывод инструкции EXPLAIN.
ответ будет таким в 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();
привет, есть ли способ сделать это быстрее, размер моей таблицы посетителей теперь составляет 600 КБ, а загрузка запроса занимает 2 секунды