Итак, я построил систему бронирования, и у меня возникли некоторые проблемы с некоторыми расчетами цен.
Первоначально у меня было
SELECT c_id, c_title, c_imgdrop, c_link, c_text4,
(SELECT SUM(bd_price) as price FROM booking_dates WHERE site_id = '15' AND bd_room_type IN ('single','double') AND bd_date IN ('2011-03-05') AND bd_h_id = c_id) AS sum_price
FROM c_content
JOIN (SELECT bd_h_id FROM booking_dates WHERE site_id = '15' AND bd_date IN ('2011-03-05') AND bd_available <= '1' AND bd_room_type = 'single' AND bd_price > '0' GROUP BY bd_h_id HAVING count(*) = '1' ) q_0 ON c_content.c_id = q_0.bd_h_id
JOIN (SELECT bd_h_id FROM booking_dates WHERE site_id = '15' AND bd_date IN ('2011-03-05') AND bd_available <= '1' AND bd_room_type = 'double' AND bd_price > '0' GROUP BY bd_h_id HAVING count(*) = '1' ) q_1 ON c_content.c_id = q_1.bd_h_id
WHERE site_id = '15'
, которое работало нормально, за исключением того, что это не таксработает очень хорошо, если вы попытаетесь рассчитать несколько типов номеров одного типа
В любом случае я попытался разделить запросы по типам номеров и умножить их на количество номеров для этого типа в бронировании.Я использовал это ( Добавление полей псевдонимов MySQL вместе ), что означало, что мне пришлось добавить дополнительный уровень подзапросов, что немного запутало.
Я почти там сейчас, но это не такраспознавая одно из имен полей в моих подзапросах, я ожидаю из-за порядка, в котором он выполняет запрос.
Теперь у меня есть:
SELECT c_id, c_title, c_imgdrop, c_link, c_text4,
(SELECT sum_price_single, sum_price_double, sum_price_single + sum_price_double AS sum_price FROM
(SELECT
((SELECT SUM(bd_price) as price FROM booking_dates WHERE site_id = '15' AND bd_room_type = 'single' AND bd_date IN ('2011-03-05') AND bd_h_id = c_id) * 1) AS sum_price_single,
((SELECT SUM(bd_price) as price FROM booking_dates WHERE site_id = '15' AND bd_room_type = 'double' AND bd_date IN ('2011-03-05') AND bd_h_id = c_id) * 1) AS sum_price_double
FROM booking_dates
)
x)
FROM c_content
JOIN (SELECT bd_h_id FROM booking_dates WHERE site_id = '15' AND bd_date IN ('2011-03-05') AND bd_available <= '1' AND bd_room_type = 'single' AND bd_price > '0' GROUP BY bd_h_id HAVING count(*) = '1' ) q_0 ON c_content.c_id = q_0.bd_h_id
JOIN (SELECT bd_h_id FROM booking_dates WHERE site_id = '15' AND bd_date IN ('2011-03-05') AND bd_available <= '1' AND bd_room_type = 'double' AND bd_price > '0' GROUP BY bd_h_id HAVING count(*) = '1' ) q_1 ON c_content.c_id = q_1.bd_h_id
WHERE site_id = '15'
И дает мнеследующая ошибка
Неизвестный столбец 'c_id' в 'предложении where'
Есть идеи?Это должно вывести список отелей (значения из таблицы c_content) и цену для каждого.Цена состоит из суммы различных дат, но также должна учитывать номера mtuliple и номера разных типов, которые также имеют разные цены.