поиск + таблица связи

Ilya

Новичок
поиск + таблица связи

Всем привет.
необходимо реализовать поиск по базе одним запросом.
имеем 3 таблицы.

1. список объектов: object_id | name | other
2. список характеристик: char_id | name | other
3. таблицу связей: id | object_id | char_id

т.е. когда мы даем какому-то объекту характеристику, запись об это появляется в таблице 3.


задача: найти объекты по заданным условиям поиска, среди которых могут быть характеристики объекта.
как реализовать поиск по таблице 1 одним запросом?
 

ForJest

- свежая кровь
Нужно для начала решить подзадачу - одним запросом выбрать все характеристики, чьё значение совпадет с условиями.
Судя по всему это будет нагромождение UNION.
 

Ilya

Новичок
ForJest
спасибо.

еще один вопрос, существуют ли более удобные схемы организации структуры подобных данных?
 

Steamroller

Новичок
Если правильно понял, требуется выбрать все объекты, обладающие всеми требуемыми характеристиками одновременно. (Т. е. судя по структуре 3-й таблицы, характеристика у объекта либо есть, либо нет).
Делается одним большим join'ом:
select o.object_id from object o, char c1, char c2, char c3 .... where o.object_id=c1.object_id and o.object_id=c2.object.id and o.object_id=c3.object.id ...... and c1.char_id=$charact[1] and с2.char_id=$charact[2] and c3.char_id=$charact[3] ... ;

у третьей таблицы надо сделать primary key - (object_id, char_id)
если на большом кол-ве характеристик эта конструкция начинает тормозить - после слова select надо добавить straight_join.

еще один вопрос, существуют ли более удобные схемы организации структуры подобных данных?
Нет. То что ты привел - нормальная форма.
 

Ilya

Новичок
Steamroller

спасибо за ответ, но не могу понять, что такое char c1, char c2 в SELECT .. FROM

?

-~{}~ 06.10.05 20:30:

Steamroller
разобрался :) еще раз спасибо, все получилось.
 
Сверху