Задавайте вопросы, мы ответим
Вы не зашли.
помогите плз с запросом
есть две таблицы
1. ассортимент квартир
этаж -- кол-во комнат -- площадь
1 1 10
2 1 10
5 1 10
2 2 12
1 1 22
2. прайс
кол-во комнат -- площадь -- цена -- этаж
задача - сделать join таблиц, чтобы для каждой позиции ассортимента однозначно определить цену
загвоздка:
1. в зависимости от этажа, цена квартиры может быть разной (т.е. квартиры на 1-м этаже стоят условно 10 тыр, на втором - 15 тыр, с 3-го по 10 - 18 тыр)
2. в таблице "прайс" этажи записаны как одиночные (2), так и несколько этажей, например
кол-во комнат -- площадь -- цена -- этаж
1 10 10 1
1 10 15 2
1 10 18 3,4,5,6,7,8,9,10
Неактивен
Таблицы Прайс задана с нарушением атомарности данных, то есть она не удовлетворяет первой нормальной форме.
Нужно её привести к это виду путем следующего преобразования:
кол-во комнат -- площадь -- цена -- этаж
1 10 10 1
1 10 15 2
1 10 18 3
1 10 18 4
1 10 18 5
1 10 18 6
1 10 18 7
1 10 18 8
1 10 18 9
1 10 18 10
Ну а дальше просто простой запрос
SELECT `прайс`.`цена` FROM `прайс`, `ассортимент` WHERE `прайс`.`этаж` = `ассортимент`.`этаж` AND `прайс`.`площадь` = `ассортимент`.`площадь` AND `прайс`.`кол-во комнат` = `ассортимент`.`кол-во комнат` AND `ассортимент`.`id`(ключевое поле по которому выборку делаем) = '7'
Если Вы ждёте какую-то индийскую хранимую процедуру, которая будет сначала пробегаться по всем записям прайса, строить временную таблицу в первой нормальной форме, и потом делать выборку, то это будет работать сумасшедше долго и поэтому не советую даже пытаться.
Лучше сейчас потратить некоторое время на преобразование таблицы и, как я думаю, кода для работы с ней, чем мучаться потом от супер не оптимальной организации данных, котороя обязательно потом наложит органичения на использоваение этих самых данных или сделает доступ к ним не приятным, долгим и мучительным.
(прошу прощение за "нравоучение")
Неактивен
ну собственно так и реализовано в итоге
создается временная таблица, в ней этаж уникален, а дальше идет простой апдейт
искал более изящный способ
спасибо!
Неактивен