parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

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

Sanja v.2 08.08.2003 17:25

У меня возникла проблема такого рода. Контент сайта хранится в 2 таблицах, в первой - собственно дерево документов, во второй - версии контента. У обоих таблиц есть общее поле doc_id, у первой оно - primary key, у второй - нет.

то есть может быть запись об одной из страниц сайта -
doc_id > parent_id > thread_id > author
    10 >         5 >         5 >  Sanja
и сопоставленные ей три записи в другой базе
id > doc_id > title > body > revision
13 >     10 >  Тест > Вася > август
25 >     10 >  Тест > Петя > июнь
10 >     10 >  Тест > Маша > май
Когда мне нужно вытащить список всех документов на сайте я делаю SELECT FROM таблица2, таблица1 WHERE таблица2.doc_id = таблица1.doc_id GROUP BY doc_id ORDER BY revision DESC; - будет выбрано по последней версии каждого документа из базы (т. е. из таблицы 2 будет вытащена августовская версия документа). Лепота.

А теперь попытаемся устроить поиск по сайту... и круто обломимся. Потому что если добавить к запросу WHERE body LIKE "%Петя%", SQL-сервер вытащит предпоследнюю версию документа с doc_id 10. "Пети" там уже нет, его давно заменили Васей, а в результатах поиска он вылезет :(

Что делать? Добавить флаг "это последняя версия ENUM(yes,no)"? Тогда придётся заморачиваться на предмет его обновления после каждой правки любого документа на сайте, что плохо... Подкиньте ещё идей, пожалуйста.