|
|
|
| меня интересует только одно - пользователь создает раздел, пишет любые (на свое усмотрение) ключевые слова, относящиеся к этому разделу, и .... приехали.
положив ключевики в поле TINYTEXT я всегда могу найти все темы по этому полю, только это очень ресурсоемко в плане выборки - хочу использовать только проиндексированное (KEY`ем) поле.
Вот я сейчас создаю эту тему, хочу например указать к ней следующие теги: "оптимизация, MySQL, вопросы, ключ"
получается четыре слова к именно этой теме. Теперь нажав на ссылку любого из приведенных выше тегов в облаке, я должен получить созданную мной тему в качестве результата. Вижу только выборку оператором LIKE по полю содержащему теги, но это совсем не хорошо.
Можно ускорить выборку прибегнув к чему угодно, только чтоб поиск осуществлялся не по текстовому полю?
Ни чего не приходит в голову уже несколько дней, решил даже тему поднять. | |
|
|
|
|
|
|
|
для: Рома
(02.04.2010 в 00:09)
| | тут даже думать не надо
id | id_razdel | tag
каждому тэгу отдельная строка!!!!
___
и ни каких LIKE | |
|
|
|
|
|
|
|
для: Valick
(02.04.2010 в 02:06)
| | не надо плодить разные написания одного тега.
theme_id, tag_id
Да и индекс короче будет. | |
|
|
|
|
|
|
|
для: Рома
(02.04.2010 в 00:09)
| |
--
-- Структура таблицы `tag`
--
CREATE TABLE IF NOT EXISTS `tag` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;
--
-- Дамп данных таблицы `tag`
--
INSERT INTO `tag` (`id`, `name`) VALUES
(1, 'оптимизация'),
(2, 'MySQL'),
(3, 'вопросы'),
(4, 'ключ'),
(5, 'раздел'),
(6, 'приехали');
|
--
-- Структура таблицы `linc`
--
CREATE TABLE IF NOT EXISTS `linc` (
`id_cat` int(10) unsigned NOT NULL,
`id_teg` int(10) unsigned NOT NULL,
KEY `id_cat` (`id_cat`),
KEY `id_teg` (`id_teg`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
--
-- Дамп данных таблицы `linc`
--
INSERT INTO `linc` (`id_cat`, `id_teg`) VALUES
(7, 1),
(7, 2),
(7, 3),
(7, 4),
(1, 5),
(1, 6);
|
SELECT `c`.`title`
FROM `section` AS `c`
JOIN `linc` AS `l` ON `l`.`id_cat` = `c`.`id`
LEFT JOIN `tag` AS `t` ON `t`.`id` = `l`.`id_teg`
WHERE `t`.`name` = 'MySQL'
|
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t const PRIMARY,name name 767 const 1
1 SIMPLE l ref id_cat,id_teg id_teg 4 const 1
1 SIMPLE c eq_ref PRIMARY PRIMARY 4 wpl.l.id_cat 1
|
Можно поле `name` varchar(255) NOT NULL, оптимизировать | |
|
|
|