Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: как делается меню тегов?
 
 автор: Рома   (02.04.2010 в 00:09)   письмо автору
 
 

меня интересует только одно - пользователь создает раздел, пишет любые (на свое усмотрение) ключевые слова, относящиеся к этому разделу, и .... приехали.

положив ключевики в поле TINYTEXT я всегда могу найти все темы по этому полю, только это очень ресурсоемко в плане выборки - хочу использовать только проиндексированное (KEY`ем) поле.
Вот я сейчас создаю эту тему, хочу например указать к ней следующие теги: "оптимизация, MySQL, вопросы, ключ"
получается четыре слова к именно этой теме. Теперь нажав на ссылку любого из приведенных выше тегов в облаке, я должен получить созданную мной тему в качестве результата. Вижу только выборку оператором LIKE по полю содержащему теги, но это совсем не хорошо.

Можно ускорить выборку прибегнув к чему угодно, только чтоб поиск осуществлялся не по текстовому полю?
Ни чего не приходит в голову уже несколько дней, решил даже тему поднять.

  Ответить  
 
 автор: Valick   (02.04.2010 в 02:06)   письмо автору
 
   для: Рома   (02.04.2010 в 00:09)
 

тут даже думать не надо
id | id_razdel | tag

каждому тэгу отдельная строка!!!!
___
и ни каких LIKE

  Ответить  
 
 автор: Trianon   (02.04.2010 в 09:32)   письмо автору
 
   для: Valick   (02.04.2010 в 02:06)
 

не надо плодить разные написания одного тега.
theme_id, tag_id
Да и индекс короче будет.

  Ответить  
 
 автор: oliss   (02.04.2010 в 10:46)   письмо автору
 
   для: Рома   (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, оптимизировать

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования