Wednesday 24 May 2017

Select the opposite of the union data

I had product, vendor, vendor's available day and booking tables. Currently, my search function only can search through vendor available day, but not search through booking table. I used left joins between vendor and vendor available day and compare with the selected day, time and hour. The search result works. How do I search through booking table?

Product Table

id | vendor_id | title | description

Vendor Table

id | name

Vendor Available Table

id | vendor_id | d_day | d_start_hour | d_start_minute | d_end_hour | d_end_minute

Booking Table

id | vendor_id | d_date | d_day | d_start_hour | _start_minute

Below is how I select product based on the selected day, start_hour and start_minute:

SELECT * FROM product
LEFT JOIN ( SELECT * FROM vendor GROUP BY id ) vendor 
   ON vendor.id = product.vendor_id
LEFT JOIN ( SELECT * FROM vendor_available GROUP BY id) vendor_available 
   ON vendor_available.vendor_id = product.vendor_id
WHERE ( d_day = '4' 
AND (CONCAT(d_start_hour, '.' , d_start_minute) + 0.0) <= '12.15' 
AND (CONCAT(d_end_hour, '.', d_end_minute) + 0.0) >= '12.15')

4 is the selected day and 12.15 is the selected hour and selected minute on the client side.

When the user selects 12.15 which is 12.15pm, the query will check which product is available between the vendor available time.

How do I use opposite union with booking table, so that the product which already booked doesn't display to users?



via Abel Chun

No comments:

Post a Comment