SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 08.07.2008 00:16:19

devilmaydie
Участник
Зарегистрирован: 08.07.2008
Сообщений: 2

custom parameters

Есть такая схема хранения данных:
1. Объект - object(id, name)
2. Параметры объекта - attribute(id, object_id, atribute_type_id, value)
3. Типа параметров - attribute_type(id, name)

Задача - вывести объекты с параметрами по определённой выборбке по параметрам (масло масленное).

Т.е. допустим нужно найти объекты с параметрами id = 1 и 2, где значения для 1 меньше n, а для 2 больше m

Правое полушарие мозга выдаёт следующее (реализация на Doctrine)
    $query = new Doctrine_Query();
    $query->select('id, obj.*, obj_attr.*, obj_attr_type.*')
          ->from('Attr attr')
          ->leftJoin('attr.Object obj')
          ->leftJoin('attr.AttrType attr_type')
          ->where('attr.value > '.$m' AND attr.attr_type_id = 1')
          ->addWhere('attr.value < '.$n.' AND attr.attr_type_id = 2')
          ->leftJoin('obj.Attr obj_attr')
          ->leftJoin('obj_attr.AttrType obj_attr_type');

На выходе массив, типа:
Attribute
  Object
    Attribute
      Attribute_Type
    Attribute
      Attribute_Type
    Attribute
      Attribute_Type   

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

Неактивен

 

#2 08.07.2008 00:28:35

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: custom parameters

Честно говоря, не понял, что Вы хотели сказать smile

Например, могу написать то же самое на SQL:

Код:

SELECT o.name, at.name, a.value
FROM object o 
JOIN attribute a ON o.id = a.object_id
JOIN attribute_type at ON at.id = a.id
WHERE ((a.id = 1 AND a.value < n) OR (a.id = 2 AND a.value > m));

Неактивен

 

#3 08.07.2008 07:13:51

devilmaydie
Участник
Зарегистрирован: 08.07.2008
Сообщений: 2

Re: custom parameters

В итоге мы получим только объекты с искомыми атрибутами. Нужно получить сразу объект с привязанными к нему атрибутами

Неактивен

 

#4 08.07.2008 12:39:39

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: custom parameters

Угу, я понял, что вы хотите сказать. Атрибутов у объекта может быть несколько, и Вы
хотите выводить все атрибуты. Тогда я бы сделал через подзапрос:

Код:

SELECT o.name, at.name, a.value
FROM object o 
JOIN attribute a ON o.id = a.object_id
JOIN attribute_type at ON at.id = a.id
WHERE o.id IN (SELECT DISTINCT object_id FROM attribute a WHERE ((a.id = 1 AND a.value < n) OR (a.id = 2 AND a.value > m)))

Неактивен

 

Board footer

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