我有一个包含两个表,预订和用户的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(*);
但是它将数据库锁定了相当长的时间。
答案 0 :(得分:1)
在书中选择分组:
select user_id, count(1) from bookings group by user_id;
然后,如果您需要名称等,请使用users表
加入此子选择答案 1 :(得分:1)
首先,您的ON子句不完整。通常它是ON X=Y
,你有ON X
。这很重要,因为您告诉数据库如何链接您的两个表。我猜这是失去最多时间的地方。
其次,这里使用的LEFT JOIN是没用的(除非你想要没有用户的预订。)尝试INNER JOIN。
第三,作为一般规则,最好做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;