Считайте по двум таблицам - PullRequest
       2

Считайте по двум таблицам

0 голосов
/ 24 октября 2011

У меня есть база данных mysql с двумя таблицами, бронированиями и пользователями.Они связаны внешним ключом user_id в таблице заказов.

Как мне показать количество заказов на пользователя.

Я пробовал варианты этого запроса:

select first_name, last_name, count(*) 
from bookings 
left join users on bookings.user_id 
group by user_id 
order by count(*);

Но она блокирует базу данных на невероятно долгое время.

Ответы [ 2 ]

1 голос
/ 24 октября 2011

Во-первых, ваше предложение ON не завершено.Обычно это будет ON X=Y, у вас есть ON X.Это важно, потому что вы говорите базе данных, как связать две таблицы.Я предполагаю, что именно здесь теряется наибольшее время.

Во-вторых, ЛЕВОЕ СОЕДИНЕНИЕ, как здесь используется, бесполезно (если только вы не хотите бронировать, у которых нет пользователей.) Попробуйте ВНУТРЕННЕЕ СОЕДИНЕНИЕ.

В-третьих, как правило, лучше сделать SmallTable INNER JOIN BigTable (не всегда ваш пробег может отличаться.)

В-четвертых, как уже упоминалось, использовать псевдоним для предложения ORDER BY.

Попробуйте:

select first_name, last_name, count(*) as cnt
from users
inner join bookings on bookings.user_id = user.id
group by user_id
order by cnt;
1 голос
/ 24 октября 2011

Выберите группу в книгах:

select user_id, count(1) from bookings group by user_id;

А затем, если вам нужно имя и т. Д., Присоединитесь к этому подбору с таблицей пользователей

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