该数据库有几个表:
现在每个旅游都可以有n预订,每个导游都可以有n旅游。然而,在我的主页上,我只想显示一个5的名单,每个导游一个旅游限制。然而,如果我从左边的join中获取预订,我需要按"tourId“分组,但在另一边,我也需要按"tourGuideId”分组,以限制为1。如果我组由tourGuideId显示,它只给我显示了每名导游一次,但在左侧联接时会出现问题,并显示预订,尽管没有。如果我使用tourId的组,它适用于左联接,但不适用于每个向导的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:一个简单的“f.tourGuideId,f.tourId组”不能工作。它使左联接工作,但不限于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发布于 2016-12-08 08:27:08
从一个查询开始,该查询获取每个向导的最新巡演,如SQL Select only rows with Max Value on a Column所示。
然后,使用一个子查询连接它,该查询获取每个指南的总预订量。
SELECT f.*, bookings
FROM tours AS f
JOIN (SELECT MAX(tourId) AS maxTourId
FROM tours
GROUP BY tourGuideId) AS f1
ON f.tourId = f1.maxTourId
JOIN (
SELECT tourGuideId, SUM(b.bookingSeats) AS bookings
FROM tours AS f
LEFT JOIN bookings AS b ON f.tourId = b.bookingsTourId
GROUP BY tourGuideId) AS b
ON f.tourGuideId = b.tourGGuideId
ORDER BY tourId DESC
LIMIT 1https://stackoverflow.com/questions/41033990
复制相似问题