| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Реализация тегов на сайте |
| Автор: Igor_K 10.8.2008, 22:29 | ||
| Добрый день уважаемые пользователи! Создал эту тему, потому что моих знаний не хватает, и мне нужна теория. Я хочу реализовать теги на сайта. Пример: юзер пишет пост, и записует теги через запятую (комп,мышка,клава,монитор - например). И вот я не очень понимаю как их обработать и записать в таблицу тегов. Или я не так себе представляю как это должно выглядеть. Я думал сделать так: Например в таблице тегов хранится данные id - идентификатор тега name - название тега count - число общих встреч тега (то есть сколько раз его вписали) Вопрос: поле name нужно делать индексированным? Значит так. Сервер получает строку тегов, потом нужно найти есть ли введенные пользователям теги в таблице тегов, и если есть, то прибавить к найденному тегу, к полю count, единицу. Ну найти я думаю WHERE name IN (комп,мышка,клава,монитор) - или както по другому? А как потом добавить единицу к найденным тегам? Это ж получается за каждый тег - запрос. А если введет 50 тегов, то и получается 50 запросов. Или можно както реализовать по другому? Может
или это неправильный запрос? Я в SQL не очень шарю :( Или это все неправильно и нужно делать по другому? Выслушаю любую точку зрения и любые ссылки на информацию для этого. А как поиск по тегам... Получается искать в таблице тегов, получить найденные идентификаторы тегов. И потом сделать запрос в таблицу постов в поле, где хранятся идентификаторы написанных тегов. Но в поле идентификаторов тегов в таблице постов идешники тегов хранятся в виде: 1,12,321,59. То есть как запрос делать с найденными тегами? WHERE tags_id IN (найденные идентификаторы через запятую) - такой же запрос не подходит. Или хранить название тегов через запятую в таблице постов? Или можно хранить идешники постов в поле таблицы с тегами, где к каждому тегу пишется идентификаторы постов через запятую, где встречается этот тег. Я вообще в непонятках Помогите советом пожалуйста! Спасибо! |
| Автор: HackMan 10.8.2008, 22:31 |
| похожая проблема: http://forum.vingrad.ru/forum/topic-223630/kw-%D0%B1%D0%B0%D0%B7%D0%B0-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D1%84%D0%B8%D0%BB%D1%8C%D0%BC%D0%B0%D0%BC.html |
| Автор: skyboy 10.8.2008, 22:40 |
| Igor_K, твои проблемы решило бы использование конструкции inner join. несмотря на то, что в общем случае количество запросов не определяет ни производительность, ни надежность. |
| Автор: Igor_K 10.8.2008, 23:03 | ||||
В топике про филмы структура таблиц такая:
У меня она получается набуває такого вида:
У меня есть просьба к добрым людям. Скажите пожалуйста в каких полях нужно ставить индексы, где какие ключи ставить. Я вообще нубас в этом. С учетом что будет поиск по тегам. |
| Автор: HackMan 10.8.2008, 23:19 |
| Сейчас нет времени искать ссылки или объяснять. Поищи в нете про "реляционные базы данных", "первичные ключи", "внешние ключи", "нормализацию", "индексы" |
| Автор: Igor_K 11.8.2008, 09:34 |
| С первычными ключами все понятно. Инжекс думаю нужно поставить на название тега. А от с обычными ключами не ясно. На каких полях ставить? |
| Автор: HackMan 11.8.2008, 09:44 |
| Имеешь в виду "внешние ключи"? Их надо ставить на поля, которыми связываешь одну таблицу с другой. В твоём случае это будут postid и tagid Добавлено через 10 минут и 57 секунд Замечу, что ставить их не обязательно. Эти ключи могут обеспечивать целостность данных, но в ущерб производительности. Если ты уверен, что у тебя никак случайно не могу попасть левые значения, или это не столь критично, тогда можно обойтись и без внешних ключей. Индекс - это упорядоченный указатель на записи в таблице. Единственное для чего они нужны - это для ускорения поиска записи по её индексированному полю. Следует понимать, что индекс не является частью таблицы. Эт отдельный объект, который связан с таблицей и другими объектами БД. Так что индекс вешай на те поля, которые будут использоваться для условия отбора (в хвостике WHERE). |
| Автор: Igor_K 11.8.2008, 10:17 |
| HackMan, спасибо за ответ. Индекс на название тега я хочу поставить потому что у меня будет поиск по названию тега. |
| Автор: HackMan 11.8.2008, 10:19 |
| На строковой тип данных есть особенность, надо указать, на сколько символов делать индекс. Чем больше укажешь - тем быстрее будет "искаться" и тем больше будет уходить памяти Подробнее - в мануале, я спать хочу |
| Автор: Igor_K 11.8.2008, 12:42 |
| HackMan, спасибо за ответ еще раз! 3 символов для индекса тегов думаю хватит. спасибо! Спокойного сна! |