![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Igor_K |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 4.2.2008 Где: Kyiv Репутация: нет Всего: нет |
Добрый день уважаемые пользователи!
Создал эту тему, потому что моих знаний не хватает, и мне нужна теория. Я хочу реализовать теги на сайта. Пример: юзер пишет пост, и записует теги через запятую (комп,мышка,клава,монитор - например). И вот я не очень понимаю как их обработать и записать в таблицу тегов. Или я не так себе представляю как это должно выглядеть. Я думал сделать так: Например в таблице тегов хранится данные id - идентификатор тега name - название тега count - число общих встреч тега (то есть сколько раз его вписали) Вопрос: поле name нужно делать индексированным? Значит так. Сервер получает строку тегов, потом нужно найти есть ли введенные пользователям теги в таблице тегов, и если есть, то прибавить к найденному тегу, к полю count, единицу. Ну найти я думаю WHERE name IN (комп,мышка,клава,монитор) - или както по другому? А как потом добавить единицу к найденным тегам? Это ж получается за каждый тег - запрос. А если введет 50 тегов, то и получается 50 запросов. Или можно както реализовать по другому? Может
или это неправильный запрос? Я в SQL не очень шарю :( Или это все неправильно и нужно делать по другому? Выслушаю любую точку зрения и любые ссылки на информацию для этого. А как поиск по тегам... ![]() Получается искать в таблице тегов, получить найденные идентификаторы тегов. И потом сделать запрос в таблицу постов в поле, где хранятся идентификаторы написанных тегов. Но в поле идентификаторов тегов в таблице постов идешники тегов хранятся в виде: 1,12,321,59. То есть как запрос делать с найденными тегами? WHERE tags_id IN (найденные идентификаторы через запятую) - такой же запрос не подходит. Или хранить название тегов через запятую в таблице постов? Или можно хранить идешники постов в поле таблицы с тегами, где к каждому тегу пишется идентификаторы постов через запятую, где встречается этот тег. Я вообще в непонятках ![]() Помогите советом пожалуйста! Спасибо! Это сообщение отредактировал(а) Igor_K - 10.8.2008, 22:33 |
|||
|
||||
HackMan |
|
|||
![]() Юзверь-программист ![]() ![]() Профиль Группа: Участник Сообщений: 391 Регистрация: 18.6.2005 Где: .ua Репутация: 8 Всего: 9 |
похожая проблема: http://forum.vingrad.ru/forum/topic-223630...0%B0%D0%BC.html
-------------------- Завтра - это самый загруженный день недели ![]() ![]() ![]() |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
Igor_K, твои проблемы решило бы использование конструкции inner join. несмотря на то, что в общем случае количество запросов не определяет ни производительность, ни надежность.
|
|||
|
||||
Igor_K |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 4.2.2008 Где: Kyiv Репутация: нет Всего: нет |
HackMan, спасибо! Щяс почитаем)
![]() Добавлено через 3 минуты и 53 секунды спасибо. Почитаю про inner join, я с ним никогда не работал. Я хочу максимально уменьшить нагрузку. Наверно буду делать через третюю таблицу, как описано тут: http://forum.vingrad.ru/index.php?showtopi...t&p=1605720 |
|||
|
||||
Igor_K |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 4.2.2008 Где: Kyiv Репутация: нет Всего: нет |
В топике про филмы структура таблиц такая:
У меня она получается набуває такого вида:
У меня есть просьба к добрым людям. Скажите пожалуйста в каких полях нужно ставить индексы, где какие ключи ставить. Я вообще нубас в этом. С учетом что будет поиск по тегам. |
||||
|
|||||
HackMan |
|
|||
![]() Юзверь-программист ![]() ![]() Профиль Группа: Участник Сообщений: 391 Регистрация: 18.6.2005 Где: .ua Репутация: 8 Всего: 9 |
Сейчас нет времени искать ссылки или объяснять. Поищи в нете про "реляционные базы данных", "первичные ключи", "внешние ключи", "нормализацию", "индексы"
-------------------- Завтра - это самый загруженный день недели ![]() ![]() ![]() |
|||
|
||||
Igor_K |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 4.2.2008 Где: Kyiv Репутация: нет Всего: нет |
С первычными ключами все понятно. Инжекс думаю нужно поставить на название тега. А от с обычными ключами не ясно. На каких полях ставить?
|
|||
|
||||
HackMan |
|
|||
![]() Юзверь-программист ![]() ![]() Профиль Группа: Участник Сообщений: 391 Регистрация: 18.6.2005 Где: .ua Репутация: 8 Всего: 9 |
Имеешь в виду "внешние ключи"? Их надо ставить на поля, которыми связываешь одну таблицу с другой. В твоём случае это будут postid и tagid
Добавлено через 10 минут и 57 секунд Замечу, что ставить их не обязательно. Эти ключи могут обеспечивать целостность данных, но в ущерб производительности. Если ты уверен, что у тебя никак случайно не могу попасть левые значения, или это не столь критично, тогда можно обойтись и без внешних ключей. Индекс - это упорядоченный указатель на записи в таблице. Единственное для чего они нужны - это для ускорения поиска записи по её индексированному полю. Следует понимать, что индекс не является частью таблицы. Эт отдельный объект, который связан с таблицей и другими объектами БД. Так что индекс вешай на те поля, которые будут использоваться для условия отбора (в хвостике WHERE). -------------------- Завтра - это самый загруженный день недели ![]() ![]() ![]() |
|||
|
||||
Igor_K |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 4.2.2008 Где: Kyiv Репутация: нет Всего: нет |
HackMan, спасибо за ответ.
![]() Индекс на название тега я хочу поставить потому что у меня будет поиск по названию тега. |
|||
|
||||
HackMan |
|
|||
![]() Юзверь-программист ![]() ![]() Профиль Группа: Участник Сообщений: 391 Регистрация: 18.6.2005 Где: .ua Репутация: 8 Всего: 9 |
На строковой тип данных есть особенность, надо указать, на сколько символов делать индекс. Чем больше укажешь - тем быстрее будет "искаться" и тем больше будет уходить памяти
Подробнее - в мануале, я спать хочу ![]() Это сообщение отредактировал(а) HackMan - 11.8.2008, 10:20 -------------------- Завтра - это самый загруженный день недели ![]() ![]() ![]() |
|||
|
||||
Igor_K |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 4.2.2008 Где: Kyiv Репутация: нет Всего: нет |
HackMan, спасибо за ответ еще раз!
![]() 3 символов для индекса тегов думаю хватит. спасибо! Спокойного сна! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |