如何从两个日期之间堆栈的表中获取所有行?

问题描述:

我的问题是我如何从两个日期之间堆叠的表中获取所有行。如何从两个日期之间堆栈的表中获取所有行?

这里是我的查询:

$sql = "SELECT cars.brand,cars.model,cars.reg_num,cars.horse_powers,cars.color FROM cars INNER JOIN clients_cars ON cars.id=clients_cars.cars_id WHERE cars.id IN 
     (SELECT DISTINCT clients_cars.cars_id FROM clients_cars WHERE (rent_date between '$d1' AND '$d2') AND (return_date between '$d1' AND '$d2') AND ((return_date > '$d1') OR (rent_date < '$d2')))"; 

它的作品,但它只是我的愿望的一半。

这里是我的表:

enter image description here

我想借此表明是谁,即使其中一个日期,堆叠与其他另一种是没有两个日期间租来的所有汽车。

例如我添加2014-12-04和2014-12-13,它只显示id = 5的汽车。它应该向我显示id = 8的车,因为它已于2014-12-02租用,并将于2014-12-06返回,并且应该向我显示id = 2的车,因为该车将在2014-12年租用 - 10,他正在寻找车直到2014-12-13 ...

我希望你能理解我。我需要一些帮助,请:)

+0

'在哪里,( '$ D1' 和 '$ D2' 之间rent_date)( '$ d1'和'$ d2'之间的return_date)' – mudasobwa 2014-12-03 11:51:19

+0

对于给定的d1和d2,您需要接收什么?可用或不可用的汽车?你的查询也不会给你。 – 2014-12-03 11:56:16

+0

毫米不......不起作用。它仍然无法找到堆叠的所有日期。我将12月3日添加到12月5日,并向我展示只有id = 5的汽车,但没有向我显示id = 8的汽车,这段时间内租赁。 – lfc123 2014-12-03 11:57:13

试试这个SQL:

 $sql = "SELECT cars.brand,cars.model,cars.reg_num,cars.horse_powers,cars.color FROM cars LEFT JOIN clients_cars ON cars.id=clients_cars.cars_id 
WHERE (rent_date between '$d1' AND '$d2') OR (return_date between '$d1' AND '$d2')"; 
+0

这样可以让我回到表格中的所有行,无论我添加的参数是多少 – lfc123 2014-12-03 13:14:54

+0

我已经更新了它现在尝试。 – 2014-12-03 13:19:05

+0

是的,它的工作,但不完美,但我找到了完美的方式。 $ sql =“SELECT cars.brand,cars.model,cars.reg_num,cars.horse_powers,cars.color FROM cars INNER JOIN clients_cars ON cars.id = clients_cars.cars_id WHERE cars.id IN (SELECT DISTINCT clients_cars。 cars_id FROM clients_cars WHERE('$ d1'和'$ d2'之间的rent_date)或('$ d1'和'$ d2'之间的return_date)OR((return_date>'$ d2')AND(rent_date lfc123 2014-12-03 14:02:34

与此查询尝试

"SELECT DISTINCT cars.id,cars.* FROM cars INNER JOIN clients_cars ON cars.id=clients_cars.cars_id WHERE 
    (clients_cars.rent_date between '$d1' AND '$d2') OR (clients_cars.return_date between '$d1' AND '$d2')";