|
|
|
| каталог статей.
Статьи разделены на разделы (древо Nested Sets)
stati (таблица статей)
|st_id|st_title |st_avtor|st_text|
|номер|название |автор|текст |
"tree" (таблица описывающая связи разделов)
razdel_id|podrazdel_id
"tree_st" (таблица описывающая принадлежность статей разделам)
|razdel_id|st_id|
"tree_title" (таблица описывающая названия разделов)
razdel_id|название раздела
Как сделать поиск по автору или любому другому полю таблицы stati в конкретном разделе и всех его подразделах ????????????????
...быть может стоит использовать более совершенный вид деревьев к примеру Nested Sets, но даже при использовании Nested Sets я НЕ МОГУ ПОНЯТЬ КАК ТАКОЕ ДЕЛАЮТ!
Неужели единственный возможный вариант .. это:
1) найти все статьи принадлежащие данному разделу и всем его подразделам (список id статей в массив),
2) сделать из этого списка длииинющий select к таблице stati (доп условия если id=1 или 2 или 2 или 5 и так далее со всеми найденными st_id)... но это как-то слишком "тупо!"
ОЧЕНЬ НАДЕЮСЬ НА ВАШУ ПОМОЩЬ ЗАРАНЕЕ БЛАГОДАРЕН! | |
|
|
|
|
|
|
|
для: SORF
(16.03.2007 в 00:46)
| | razdel_id|podrazdel_id - это совсем не Nested sets а вовсе таки adjacent list
А в tree_st - st_id - первичный ключ? | |
|
|
|
|
|
|
|
для: Trianon
(16.03.2007 в 10:18)
| | RE: да "в tree_st" st_id первичный ключ | |
|
|
|
|
|
|
|
для: SORF
(16.03.2007 в 23:46)
| | переделайте структуру хранения дерева на nested sets - она хорошо отрабатывает запросы типа "найти всех потомков узла N" - оптимизирована именно на них. | |
|
|
|
|
|
|
|
для: Trianon
(17.03.2007 в 19:33)
| | Спасибо непременно последую вашему совету!
а как будет выглядить запрос в случае nested sets
(если статьи и древо в разных таблицах - поиск статей автора "х " в разделе и всех его подразделах "у")
заранее благодарю! | |
|
|
|
|
|
|
|
для: Trianon
(17.03.2007 в 19:33)
| | А если более конкретно по Nested Sets ???
##### таблица описания деревьев "trees":
|tree_id|c_id|c_left|c_right|c_level|c_title|
tree_id - id дерева для хранения в одной таблице нескольких деревьев
c_id - id ветки
c_left - стандартно для Nested Sets
c_right - стандартно для Nested Sets
c_level - стандартно для Nested Sets (глубина)
c_title - название ветки (рус загаловок)
###### таблица описания статей "stati":
|st_id|st_title|st_avtor|st_data|st_text
st_id - уникальный id статьи
c_id - id ветки (КАК СПОСОБ СВЯЗИ СТАТЬИ И ВЕТКИ которой она пренадлежит)
st_title - загаловок статьи
st_avtor - автор
st_data - дата публикации
st_text - текст статьи
ВОПРОС:
КАК ВЫВЕСТИ ВСЕ СТАТЬИ ПРЕНАДЛЕЖАЩИЕ РАЗДЕЛУ "x" И ВСЕМ ЕГО ПОДРАЗДЕЛАМ ПРИ ЭТОМ АВТОР ЭТИХ СТАТЕЙ ДОЛЖЕН БЫТЬ = "у"
P.S./ОЧЕНЬ НЕ ХОЧЕТСЯ ПИХАТЬ СТАТЬИ В ТАБЛИЦУ ОПИСАНИЯ ДЕРЕВЬЕВ...
P.P.S/ Еще вот какая тема!??
Возможна ли в Nested Sets имитация сетьевых связей (отметить для одной дочерней несколько родителей сразу) - к примеру одна статья в 2х разных разделах (в абсолютно разных не одна из которых не является дочерней другой ветках дерева)??? | |
|
|
|
|
|
|
|
для: SORF
(17.03.2007 в 23:18)
| |
SELECT stati.*, trs.*
FROM trees AS tr
JOIN trees AS trs ON tr.c_left <= trs.c_left AND tr.c_right >= trs.c_right
JOIN stati ON trs.c_id = statii.c_id
WHERE tr.c_id = $id_stati
|
Касательно связи одной статьи с несколькими разделами - делается по стандартной схеме отношения M:N добавлением промежуточной таблицы фиксирующей факт размещения статьи X в разделе Y . location (id| c_id | st_id) | |
|
|
|
|
|
|
|
для: Trianon
(18.03.2007 в 00:41)
| | ОГРОМНОЕ СПАСИБО! ВЫ МНЕ ОЧЕНЬ ПОМОГЛИ!!! | |
|
|
|