簡體   English   中英

如何在MySQL查詢中獲得已經預訂的客戶?

[英]How to get already booked customers in MySQL query?

我有這個SQL提琴: http ://sqlfiddle.com/#!9/abe27/2

CREATE TABLE members
    (`id` int, `memberName` varchar(7))
;

INSERT INTO members
    (`id`, `memberName`)
VALUES
    (1, 'Steve'),
    (2, 'John'),
    (3, 'Alex')
;

CREATE TABLE enquiry
    (`id` int, `memberId` int, `enq_status` varchar(20))
;

INSERT INTO enquiry
    (`id`, `memberId`, `enq_status`)
VALUES
    (1, 1, 'Cancelled'),
    (2, 1, 'Booked'),
    (3, 3, 'Booked'),
    (4, 2, 'Cancelled'),
    (5, 3, 'Booked'),
    (6, 3, ''),
    (7, 2, ''),
    (8, 1, '')    
;

CREATE TABLE bookings
    (`id` int, `enquiryId` int)
;

INSERT INTO bookings
    (`id`, `enquiryId`)
VALUES
    (1, 2),
    (2, 3),
    (3, 5)
;

我的查詢如下:

SELECT m.memberName, e.id, e.enq_status 
FROM enquiry e,members m 
WHERE e.memberId = m.id AND e.enq_status = '';

我在其中有membersenquirybookings表。 在SQLFiddle中顯示的查詢中,我正在檢索未取消或預訂的查詢。

但是我想突出顯示或添加一列,這將告訴我們進行查詢的客戶之前是否已經預訂。

根據上面的小提琴,有什么解決方案,請告知!

您必須多次使用某些表,並且還必須使用LEFT JOIN有條件地加入以前的預訂。

SELECT e.id, m.memberName, e.enq_status, COUNT(b.id) as booking_count
FROM enquiry e
JOIN members m ON (e.memberId = m.id)
LEFT JOIN enquiry e2 ON (e2.memberId = m.id)
LEFT JOIN bookings b on (b.enquiryId=e2.id)
WHERE e.enq_status = ''
GROUP BY e.id
order by booking_count desc;
  • 從待處理的查詢開始( enq_status=''
  • 獲取該成員的數據(該數據一直存在,因此使用簡單的JOIN
  • 獲取會員的查詢(可能-> LEFT JOIN
  • 取得可能的查詢的預訂(再次LEFT JOIN
  • 然后,為每個(原始)查詢( GROUP BY )計算找到的預訂數量
  • 另外,按計數排序

我想這就是你想要的。 除了計數( COUNT(b.id) ),您還可以使用任何其他指標,例如SUM(b.amount)將總金額用作訂購因子,或者COUNT(b.id)*10 + SUM(b.amount) ,它是訂單數和總金額等的組合

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM