SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 05.04.2011 10:41:08

k_p
Участник
Зарегистрирован: 09.11.2010
Сообщений: 8

текст запроса

помогите плз с запросом

есть две таблицы
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

Неактивен

 

#2 08.04.2011 12:11:18

Chesarri
Участник
Зарегистрирован: 08.04.2011
Сообщений: 4

Re: текст запроса

Таблицы Прайс задана с нарушением атомарности данных, то есть она не удовлетворяет первой нормальной форме.
Нужно её привести к это виду путем следующего преобразования:
кол-во комнат -- площадь -- цена -- этаж
        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'

Если Вы ждёте какую-то индийскую хранимую процедуру, которая будет сначала пробегаться по всем записям прайса, строить временную таблицу в первой нормальной форме, и потом делать выборку, то это будет работать сумасшедше долго и поэтому не советую даже пытаться.

Лучше сейчас потратить некоторое время на преобразование таблицы и, как я думаю, кода для работы с ней, чем мучаться потом от супер не оптимальной организации данных, котороя обязательно потом наложит органичения на использоваение этих самых данных или сделает доступ к ним не приятным, долгим и мучительным.
(прошу прощение за "нравоучение")

Неактивен

 

#3 08.04.2011 12:39:53

k_p
Участник
Зарегистрирован: 09.11.2010
Сообщений: 8

Re: текст запроса

ну собственно так и реализовано в итоге
создается временная таблица, в ней этаж уникален, а дальше идет простой апдейт

искал более изящный способ smile

спасибо!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson