2013-12-10 3 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, бронирование

Я хочу объединить оба результата запроса в один и хотите поля результатов, такие как 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 UNION даст результаты тех же полое как list_id, имя, город, bookingdate, заказы inshort , Я хочу, чтобы поле результата «заказывалось» в двух разных столбцах: bookings_lastmonth, bookings_currentmonth –

+0

, затем добавить еще один столбец для дат. – Suleman

+0

для значения «previousmonthdates» будет не равно 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

Смежные вопросы