Рассмотрение некоторых других вопросов с запросами о доступности mysql дало мне понять, что моя работа немного отличается от других.
В основном у меня есть таблица дат, и каждыйдата - это строкаВ каждой строке есть поля, в которых указывается стоимость, тип номера и сколько дней должно быть зарезервировано для бронирования на эту дату.Поэтому, если в отеле есть 1 тип номера, в нем будет 365 строк, если в нем 5 типов номеров, то будет 1825 строк
bd_id int(10) NO PRI NULL auto_increment
bd_room_type varchar(32)
bd_date date NO
bd_price decimal(8,2)
bd_h_id int(8) NO /* Hotel id */
bd_available tinyint(1) /* number of days you must book to include this date */
. Я получаю даты от и до, и заполняю пробел вмежду тем, у меня есть все даты для бронирования.
$q1 = "SELECT bd_h_id
FROM booking_dates
WHERE bd_date IN ('2011-02-16','2011-02-17','2011-02-18')
AND bd_available <= '3'
AND bd_room_type = 'single'
AND bd_price > '0'
GROUP BY bd_h_id
HAVING count(*) = '3'";
Так что, если количество совпадает с продолжительностью, это означает, что все зависимости были выполнены, и это может показать результат в поиске.
Затем я передаю этот запрос как переменную в другой запрос, который извлекает информацию об отеле, проверяет, возвращает ли подзапрос что-либо или нет.
$q = "SELECT c_title FROM c_content WHERE c_id IN ($q1) AND IF(($q1) > 0, 1, 0)";
Это нормально, однакоесли подзапрос возвращает более 1 отеля, основной запрос выдает мне ошибку:
Подзапрос возвращает более 1 строки
Я думал, потому что я использовал 'IN'что это было бы хорошо.Какие-либо предложения?Также, когда я собираюсь реализовать несколько подзапросов, решение должно будет работать и с этим.
Я осознаю, что способ работы с комнатами не настолько элегантен, как мог бы быть, однако я не уверенкак еще добиться нужных мне результатов, поскольку заказы, как правило, представляют собой массовые заказы (например, более одного номера, забронированного за один раз, если один тип номера не доступен в указанные даты, тогда весь отель необходимо удалить из поискарезультаты).