sql查询 - 租一辆车(php)

时间:2017-12-09 14:38:13

标签: php mysql

我是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')
          );`

After choosing dates a list of available cars appears

问题是:如何编写租用从_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' )

....下一步是什么?

想点击一辆车(如附图所示),然后选择租车日期。

2 个答案:

答案 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;

我认为这个可行。