Резервирование: я хочу отобразить все записи с условием, включая, если запись является нулевой в таблице № 2 - PullRequest
1 голос
/ 20 июня 2019

Я разрабатываю систему бронирования, в которой я буду отображать все записи пользователю, для которого статус «Проверен», carType соответствует желаемому пользователю, и записи с тем же типом службы, что и пользовательский ввод.Проблема в том, что запись не показывает, не существует ли запись об автомобиле в таблице бронирования.Средство проверки перекрывающихся дат работает, но не показывает другие проверенные записи, тот же тип обслуживания, тот же тип карты, но нулевой в таблице бронирования.

    $startDate = '2019-06-04 07:00:00';
    $endDate = '2019-06-20 07:00:00';
    $serviceType = "Self-drive";
    $carType = "SUV";


    $sql = "SELECT carrecord.recordID, carrecord.recordLong, carrecord.recordLat, 
model.brandName, model.modelName, carrecord.amount, model.carType, carrecord.status, 
carrecord.recordPicture, booking.recordID AS bookRecordID FROM carrecord
    LEFT JOIN booking
    ON booking.recordID = carrecord.recordID
    LEFT JOIN car
    ON car.carID  =  carrecord.carID
    LEFT JOIN model
    ON model.modelID = car.modelID  
    WHERE
    model.carType = '$carType'
    AND
    carrecord.serviceType = '$serviceType'
    AND
    carrecord.status = 'Verified'
    OR booking.recordID IS NULL
    AND NOT EXISTS
    (
        SELECT booking.recordID FROM booking 
        WHERE '$startDate' <= booking.endDate
        AND '$endDate' >= booking.startDate
        AND booking.status = 'Accepted'
    )";

Ответы [ 3 ]

1 голос
/ 20 июня 2019

изменить вас где booking.recordID IS NULL, model.carType = '$ carType' условие и переместить их в условие

SELECT carrecord.recordID, carrecord.recordLong, carrecord.recordLat, 
model.brandName, model.modelName, carrecord.amount, model.carType, carrecord.status, 
carrecord.recordPicture, booking.recordID AS bookRecordID
    FROM carrecord
    LEFT JOIN booking
    ON booking.recordID = carrecord.recordID           
    LEFT JOIN car
    ON car.carID  =  carrecord.carID
    LEFT JOIN model
    ON model.modelID = car.modelID  and model.carType = '$carType'
    WHERE   carrecord.serviceType = '$serviceType'
    AND
   carrecord.status = 'Verified'     

     NOT EXISTS
    (
        SELECT booking.recordID FROM booking 
        WHERE '$startDate' <= booking.endDate
        AND '$endDate' >= booking.startDate
        AND booking.status = 'Accepted'
    )
0 голосов
/ 20 июня 2019

Исправлена ​​проблема, помещая обе возможности в () Код:

$sql = "SELECT carrecord.recordID, carrecord.recordLong, carrecord.recordLat, model.brandName, model.modelName, 
carrecord.amount, model.carType, carrecord.status, carrecord.recordPicture, booking.recordID AS bookRecordID FROM carrecord
LEFT JOIN booking
ON booking.recordID = carrecord.recordID 
LEFT JOIN car
ON car.carID = carrecord.carID
LEFT JOIN model
ON model.modelID = car.modelID 
WHERE
(model.carType = '$carType'
AND
carrecord.serviceType = '$serviceType'
AND
carrecord.status = 'Verified'
AND NOT EXISTS
(
    SELECT booking.recordID FROM booking 
    WHERE '$startDate' <= booking.endDate
    AND '$endDate' >= booking.startDate
    AND booking.status = 'Accepted'
)) 
OR (booking.recordID IS NULL
AND 
model.carType = '$carType' 
AND
carrecord.status = 'Verified'
AND
carrecord.serviceType = '$serviceType')";
0 голосов
/ 20 июня 2019

Почему вы не используете booking.recordID NOT IN ( ... ) вместо NOT EXISTS?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...