我是php和sql的新手,无法编写查询。
我已经完成了一个显示/获取未发布汽车的查询。 它看起来像这样:
SELECT c.*
FROM cars c
WHERE NOT EXISTS (
SELECT *
FROM reservations as r
WHERE r.car_id = c.id AND
(r.res_from <= '2017-12-08 02:53:59' AND r.res_to >= '2017-12.09 23:58:59') OR
(r.res_from <= '2017-12-08 23:59:59' AND r.res_to >= '2017-12.09 23:58:59') OR
(r.res_from >= '2017-12-08 23:59:59' AND r.res_to <= '2017-12.09 23:58:59')
);`
问题是:如何编写租用从_date-to_date给出的汽车的查询,而用户/客户需要足够的积分(金钱)来租用指定的汽车。
link to my database http://sqlfiddle.com/#!9/170f7f4/5
我试过这样的事情。这是正确的方法吗?
SELECT * FROM cars as c, reservations as r, users as u,
WHERE HAVING c.id = r.car_id AND
r.user_id = u.user_id AND
(res_from <= '2017-12-08 02:53:59' AND r.res_to >= '2017-12-08 02:53:59') OR
(r.res_from >= '2017-12-08 23:59:59' AND r.res_to <= '2017-12-08 23:59:59' )
....下一步是什么?
想点击一辆车(如附图所示),然后选择租车日期。
答案 0 :(得分:0)
使用JOINS
SELECT * FROM cars as c
LEFT JOIN reservations as r ON c.id = r.car_id
LEFT JOIN users as u ON r.user_id = u.user_id
WHERE ...
etc.
答案 1 :(得分:0)
SELECT c.* FROM cars AS c
LEFT JOIN (SELECT r. * FROM reservations AS r
WHERE r.res_from >= '2017-12-09 23:58:59'
AND r.res_to <= '2017-12-18 23:58:59'
)
AS r ON c.id = r.car_id
WHERE r.car_id is null;
我认为这个可行。