2015-08-27 3 views
-6

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

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

база

enter image description here

$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 
} 
+0

Неясные вопрос. Каковы ваши таблицы (показать структуру и образец данных)? Что возвращает запрос? Какой результат вы ожидаете? – rlanvin

+0

прямо сейчас запрос выводит 3-дневные тарифы, которые просто нужно вывести 2 дня – Jonathan

+1

, тогда не используйте <=, но просто <, так как вы хотите меньше, чем день выписки – BugFinder

ответ

2

Я просто изменить мой 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 

Done.

3

Вы можете даже не нужно, чтобы решить его в использовании PHP в вашем-то запросов, как:

DATE_SUB(final_date, INTERVAL 1 DAY) 

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

+0

или просто' final_date - INTERVAL 1 DAY' –

1

В MySql и можно использовать просто DATE_ADD (checkout_date, ИНТЕРВАЛ -1 DAY) .Это будет уменьшаться 1 день с даты оформления заказа , то и может рассчитывать дату диф правильно

DATEDIFF(DATE_ADD(checkout_date,INTERVAL -1 DAY),checkin_Date) 
Смежные вопросы