2013-12-10 54 views
0

我已經喜歡MySQL的加入兩個單獨的查詢結果

// This query will return past month records 
SELECT b.list_id, r.name, r.city, FROM_UNIXTIME(b.bookingdate, '%Y-%m-%d- %h:%i:%s') AS 'bookingdate', COUNT(*) AS bookings 
FROM booking b JOIN restaurants r ON r.list_id = b.list_id 
WHERE b.bookingdate BETWEEN 1383224400 AND 1385730000 GROUP BY b.list_id 

// This query will return current month records 
SELECT b.list_id, r.name, r.city, FROM_UNIXTIME(b.bookingdate, '%Y-%m-%d- %h:%i:%s') AS 'bookingdate', COUNT(*) AS bookings 
FROM booking b JOIN restaurants r ON r.list_id = b.list_id 
WHERE b.bookingdate BETWEEN 1385816400 AND 1388408400 GROUP BY b.list_id 

兩個結果字段兩個不同的查詢,查詢 LIST_ID,名稱,城市,bookingdate,預訂

我想這兩個查詢結果合併成one and want results fields like list_id,name,city,bookingdate,bookings_lastmonth,bookings_currentmonth

這樣做的最佳方法是什麼?

+0

'JOIN'具有特殊的意義在SQL,使用在您的標題,使這個混亂。 – Barmar

回答

3

使用UNION屬性: -

SELECT b.list_id, r.name, r.city, FROM_UNIXTIME(b.bookingdate, '%Y-%m-%d- %h:%i:%s') AS 'bookingpreviousdate', '0' AS bookingnextdate, COUNT(*) AS bookings 
FROM booking b JOIN restaurants r ON r.list_id = b.list_id 
WHERE b.bookingdate BETWEEN 1383224400 AND 1385730000 GROUP BY b.list_id 
UNION 
SELECT b.list_id, r.name, r.city, '0' AS 'bookingpreviousdate', 'FROM_UNIXTIME(b.bookingdate, '%Y-%m-%d- %h:%i:%s')' AS bookingnextdate, COUNT(*) AS bookings 
FROM booking b JOIN restaurants r ON r.list_id = b.list_id 
WHERE b.bookingdate BETWEEN 1385816400 AND 1388408400 GROUP BY b.list_id 
+0

我想這兩個查詢結果劃分爲一個組合,並希望得到像 LIST_ID,名稱,城市,bookingdate,bookings_lastmonth領域,bookings_currentmonth 聯盟將給予相同的字段 像LIST_ID,名稱,城市,bookingdate的結果,預訂 inshort ,我想要在兩個不同列中的結果字段「預訂」 bookings_lastmonth,bookings_currentmonth –

+0

然後再爲日期添加一列。 'previousmonthdates'的值爲 – Suleman

+0

將不等於0,'nextmonthdates'的值不等於0. – Suleman

0

我不知道有關bookingdate

SELECT b.list_id, r.name, r.city, FROM_UNIXTIME(b.bookingdate, '%Y-%m-%d- %h:%i:%s') AS bookingdate, 
    COUNT(b.list_id) AS bookings_lastmonth, COUNT(c.list_id) AS bookings_currentmonth 
FROM restaurants r 
LEFT JOIN booking b ON r.list_id = b.list_id AND b.bookingdate BETWEEN 1383224400 AND 1385730000 
LEFT JOIN booking c ON r.list_id = c.list_id AND c.bookingdate BETWEEN 1385816400 AND 1388408400 
GROUP BY r.list_id 
HAVING bookings_lastmonth>0 OR bookings_currentmonth>0 
0

不知怎的,它由此工作查詢

SELECT t1.list_id, t1.name, t1.city, t1.bookings AS bookings_lastmonth, t2.bookings AS bookings_currentmonth 
FROM (SELECT b.list_id, r.name, r.city, FROM_UNIXTIME(b.bookingdate, '%Y-%m-%d- %h:%i:%s') AS 'bookingdate', COUNT(*) AS bookings 
     FROM booking b JOIN restaurants r ON r.list_id = b.list_id 
     WHERE b.bookingdate BETWEEN 1383224400 AND 1385730000 
     GROUP BY b.list_id) AS t1 

     JOIN (SELECT b.list_id, r.name, r.city, FROM_UNIXTIME(b.bookingdate, '%Y-%m-%d- %h:%i:%s') AS 'bookingdate', COUNT(*) AS bookings 
     FROM booking b JOIN restaurants r 
     ON r.list_id = b.list_id 
     WHERE b.bookingdate BETWEEN 1385816400 AND 1388408400 
     GROUP BY b.list_id) AS t2 

     ON t1.list_id = t2.list_id 

但我仍然有更多的工作imporovements