Минус день в запросе DATEDIFF

Если пользователь выбирает дату между "2015-08-27 to 2015-08-29" тогда 29 считается его датой оплаты, поэтому я хочу вывести ставки 27 & 28.

Прямо сейчас этот код ниже выводит 3 дня, просто нужно вывести 2 дня

база данных

введите описание изображения здесь

$pdo = $dbo->prepare(
"SELECT r.*, rr.rid, SUM(ABS(DATEDIFF(:ci, :co) * rr.rate)) as totalsum, rr.sdate, rr.edate
FROM rooms r
LEFT JOIN rates as rr ON r.id=rr.rid
WHERE r.id NOT IN (SELECT room_id FROM reservation as b WHERE (b.checkout <= :ci
AND b.checkin >= :co) OR (b.checkout >= :ci AND b.checkin <= :co))
AND (rr.sdate >= :ci AND rr.edate <=:co) OR (rr.sdate <=:ci AND rr.edate >=:co)
GROUP BY rr.rid, r.room_name");
//$pdo->bindValue(':stat', 'confirm', PDO::PARAM_STR);
$pdo->bindParam(':ci', $check_in, PDO::PARAM_STR);
$pdo->bindParam(':co', $check_out, PDO::PARAM_STR);
if (!$pdo->execute()) {
print_r($pdo->errorInfo());
} else {
//Do something
}

-6

Решение

Возможно, вам даже не понадобится решать эту проблему с использованием PHP в вашем запросе, например:

DATE_SUB(final_date, INTERVAL 1 DAY)

Это должно быть эквивалентно (final_date — 1 день)

3

Другие решения

Я просто поменяю check out string из этого

$check_out =  date("Y-m-d" strtotime($_POST['co'])

в

$check_out = date("Y-m-d", strtotime('-1 day', strtotime($_POST['co'])));

И удалить DATEDIFF() & ABS() в запросе, как это ниже

SELECT r.*, rr.rid, SUM(rr.rate) as totalsum, rr.sdate, rr.edate
FROM rooms r
LEFT JOIN rates as rr ON r.id=rr.rid
WHERE rr.sdate >= :ci AND rr.edate <= :co
GROUP BY rr.rid, r.room_name

Готово.

2

В MySql вы можете использовать просто DATE_ADD (checkout_date, INTERVAL -1 DAY). Это будет уменьшаться на 1 день с вашей даты оформления заказа
тогда вы можете правильно считать дату

DATEDIFF(DATE_ADD(checkout_date,INTERVAL -1 DAY),checkin_Date)
1
По вопросам рекламы [email protected]