|
|
|
| Есть вот такой запрос,
"SELECT .... FROM ... WHERE `node` REGEXP '[[:<:]](39|7|2|9|5|16|15|3|13|10)[[:>:]]' AND ... ORDER BY ... LIMIT ..."
|
где `node`, это вложеные категории (уровень вложенности может быть любым), в данном случае новостей.
В них же, кроме разделения по рубрикам, ещё и разделение по регионам, тоже вложено.
Т.е примерно так
По регионам
--В мире
--Россия
----ДФО
------город1
------город2
----Другой регион
------город1
------город2
По рубрикам
--Авто
--Бизнес
--Спорт
При добавлении поста (нововсти), выбераются ID добавляемых категорий (разделов), они записываются через запятую в `node`. Есть причины, по которым необходдимо отделить "Регионы" от "Рубрик". А так как некоторые новости могут принадлежать нескольким регионам, то ничего в голову не приходит как добавить ещё к примеру `region`, куда и записывать ID регионов через запятую.
Собственно вопрос в чём, намного увеличится скорость выполнения запросов? Запрос примет примерно такой вид
"SELECT ... FROM ... WHERE `node` REGEXP '[[:<:]](15|3|13|10)[[:>:]]' AND `region` REGEXP '[[:<:]](39|7|2|9)[[:>:]]' AND ... ORDER BY ... LIMIT ..."
|
Стоит замарачиваться или думать над другими вариантами? | |
|
|
|
|
|
|
|
|
для: Trianon
(25.01.2009 в 14:50)
| | Касательно связи одной статьи с несколькими разделами - делается по стандартной схеме отношения M:N добавлением промежуточной таблицы фиксирующей факт размещения статьи X в разделе Y . location (id| c_id | st_id) (с) Trianon
Кажется это то что надо.
Спасибо большое.
Мне приходило в голову что можно как то "уникализовать", не знаю как правильно выразиться, записи в `node`, но не приходило в голову вынести это в отдельную таблицу, а в `node` писать ID возможной комбинации разделов.
Я правильно понял? | |
|
|
|
|
|
|
|
для: mikha
(25.01.2009 в 16:14)
| | node вообще уходит из таблицы.
Строк с нужными комбинациями может оказаться несколько.
region_link (id, news_id, region_id)
rubric_link (id, news_id, rubric_id)
По большому счету поля id в обоих связующих таблицах необязательные.
Первичный ключ можно сделать и составным (из оставшихся двух полей) | |
|
|
|
|
|
|
|
для: Trianon
(25.01.2009 в 16:23)
| | Если честно не совсем понял..
А как в таком случае, примерно разумеется, будет выглядеть запрос?
К примеру вывести новости из где region_id 5, 11, 24 и rubric_id 2, 6, 8
И это.. В таком случае получается колличество записей в region_link и rubric_link будет равно колличеству новостей? Но поля INT, я просто размышляю вслух..
В моём же варианте, колличество записей будет равно колличеству различных комбинаций.
Т.е находим комбинацию, по её ID ищем новости..
Не думаю что я изобрёл что то новое, было бы это оптимально, так бы и делали.
Просто я в этом пока не очень)))
И так))) Можно примерный запрос? | |
|
|
|
|
|
|
|
для: mikha
(25.01.2009 в 16:46)
| | Наверняка пример надуманный.
Тем не менее
SELECT * FROM news WHERE id IN
(SELECT news_id
FROM region_link JOIN rubric_link USING(news_id)
WHERE region_id IN (5,11,24) AND rubric_id IN (2,6,8))
|
это для 5-го и выше MySQL
для 4.1 чуть более громоздко будет. | |
|
|
|
|
|
|
|
для: Trianon
(25.01.2009 в 17:10)
| | Спасибо большое!!!
Будем дальше кубатурить))) | |
|
|
|