【发布时间】:2022-02-05 23:31:08
【问题描述】:
数据库有几个表:
- 旅游
- 预订
- 指南
现在每个旅游都可以有 n 个预订,每个导游可以有 n 个旅游。但是,在我的主页上,我只想显示一个包含 5 个旅行的列表,每个导游限制为 1 个旅行。但是,如果我从左加入预订,我需要按“tourId”分组,但另一方面,我还需要按“tourGuideId”分组,限制为 1。如果我 GROUP BY tourGuideId 它只向我显示每个导游的一个游览,但在 LEFT JOIN 时出现问题并显示预订,尽管没有。如果我 GROUP BY tourId 它适用于 LEFT JOIN,但不适用于每个指南 1 个的限制。
这是一个简单的查询:
SELECT f.*, SUM(b.bookingSeats) AS bookings
FROM tours AS f
LEFT JOIN bookings AS b ON f.tourId = b.bookingTourId
WHERE f.tourActive = '1'
GROUP BY f.tourGuideId
ORDER BY f.tourId DESC
LIMIT 5
如何进行?
编辑 1:简单的“GROUP BY f.tourGuideId, f.tourId”不起作用。它使 LEFT JOIN 工作,但不限于每个指南 1 个结果。
编辑 2:示例结果应该是:
tourId, tourGuideId, tourTitle, tourDate, tourActive, bookings
5, 1, 'Hello World', '2016-12-01 08:00:00', 1, NULL
9, 3, 'Tour Paris', '2017-03-01 08:00:00', 1, 3
预订表结构:
bookingId, bookingStatus, bookingUserId, bookingDate, bookingPaid
游览表结构:
tourId, tourGuideId, tourTitle, tourDate, tourActive
【问题讨论】:
-
您能否也发布一些示例输入数据以及预期的结果集?
-
样本结果应该是 ...基于哪个输入?
-
@GiorgosBetsos 示例结果是我希望收到的。相反,使用 GROUP BY tourId,我可以得到几位导游的游览,而使用 GROUP BY tourGuideId,我每个导游只能得到一个导游,但左连接不起作用。
-
bookings应该是该指南对所有旅行的预订总数,还是只是您为每个指南显示的 1 个旅行的预订数量? -
如果指南可以有 n 个游览,应该显示哪些游览?随便选一个?