Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реализация тегов на сайте, Нужна теоретическая помощь 
:(
    Опции темы
Igor_K
Дата 10.8.2008, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 4.2.2008
Где: Kyiv

Репутация: нет
Всего: нет



Добрый день уважаемые пользователи!

Создал эту тему, потому что моих знаний не хватает, и мне нужна теория.

Я хочу реализовать теги на сайта. Пример: юзер пишет пост, и записует теги через запятую (комп,мышка,клава,монитор - например). И вот я не очень понимаю как их обработать и записать в таблицу тегов. Или я не так себе представляю как это должно выглядеть.

Я думал сделать так:
Например в таблице тегов хранится данные
id - идентификатор тега
name - название тега
count - число общих встреч тега (то есть сколько раз его вписали)

Вопрос: поле name нужно делать индексированным?


Значит так. Сервер получает строку тегов, потом нужно найти есть ли введенные пользователям теги в таблице тегов, и если есть, то прибавить к найденному тегу, к полю count,  единицу.
Ну найти я думаю WHERE name IN (комп,мышка,клава,монитор)  - или както по другому?
А как потом добавить единицу к найденным тегам? Это ж получается за каждый тег - запрос. А если введет 50 тегов, то и получается 50 запросов. Или можно както реализовать по другому?
Может
Код

UPDATE table_tag SET count = count + 1 WHERE id = (SELECT id FROM table_tag WHERE name IN (комп,мышка,клава,монитор))

или это неправильный запрос? Я в SQL не очень шарю :(

Или это все неправильно и нужно делать по другому? Выслушаю любую точку зрения и любые ссылки на информацию для этого.

А как поиск по тегам... smile 
Получается искать в таблице тегов, получить найденные идентификаторы тегов. И потом сделать запрос в таблицу постов в поле, где хранятся идентификаторы написанных тегов. Но в поле идентификаторов тегов в таблице постов идешники тегов хранятся в виде: 1,12,321,59. То есть как запрос делать с найденными тегами? WHERE tags_id IN (найденные идентификаторы через запятую) - такой же запрос не подходит.
Или хранить название тегов через запятую в таблице постов?
Или можно хранить идешники постов в поле таблицы с тегами, где к каждому тегу пишется идентификаторы постов через запятую, где встречается этот тег.

Я вообще в непонятках smile 
Помогите советом пожалуйста!
Спасибо!

Это сообщение отредактировал(а) Igor_K - 10.8.2008, 22:33
PM MAIL   Вверх
HackMan
Дата 10.8.2008, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Юзверь-программист
**


Профиль
Группа: Участник
Сообщений: 391
Регистрация: 18.6.2005
Где: .ua

Репутация: 8
Всего: 9





--------------------

Завтра - это самый загруженный день недели smile

user posted image

user posted image
PM MAIL ICQ   Вверх
skyboy
Дата 10.8.2008, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Igor_K, твои проблемы решило бы использование конструкции inner join. несмотря на то, что в общем случае количество запросов не определяет ни производительность, ни надежность.
PM MAIL   Вверх
Igor_K
Дата 10.8.2008, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 4.2.2008
Где: Kyiv

Репутация: нет
Всего: нет



HackMan, спасибо! Щяс почитаем) smile

Добавлено через 3 минуты и 53 секунды
Цитата(skyboy @  10.8.2008,  22:40 Найти цитируемый пост)
Igor_K, твои проблемы решило бы использование конструкции inner join. несмотря на то, что в общем случае количество запросов не определяет ни производительность, ни надежность. 

спасибо. Почитаю про inner join, я с ним никогда не работал.
Я хочу максимально уменьшить нагрузку. Наверно буду делать через третюю таблицу, как описано тут: http://forum.vingrad.ru/index.php?showtopi...t&p=1605720
PM MAIL   Вверх
Igor_K
Дата 10.8.2008, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 4.2.2008
Где: Kyiv

Репутация: нет
Всего: нет



В топике про филмы структура таблиц такая:
Цитата

Таблица "films" (Фильмы)
id - код
name - название
year - годвыпуска
description - описание
Таблица "genres" (Жанры)
id - код
name - наименование жанра
Таблица "filmgenrelinks" (Связи жанров с фильмами)
id - код
filmid - код фильма, связан с films.id
genreid - код жанра фильма, связан с genres.id


У меня она получается набуває такого вида:
Цитата

Таблица post - таблица постов
id - идентификатор
text - текст поста

Таблица tags - таблица тегов
id - идентификатор тега
title - название тега

Таблица tag2 Связи тегов с постами
postid - код фильма, связан с post.id
tagid - код жанра фильма, связан с tags.id 


У меня есть просьба к добрым людям. Скажите пожалуйста в каких полях нужно ставить индексы, где какие ключи ставить. Я вообще нубас в этом.

С учетом что будет поиск по тегам.
PM MAIL   Вверх
HackMan
Дата 10.8.2008, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Юзверь-программист
**


Профиль
Группа: Участник
Сообщений: 391
Регистрация: 18.6.2005
Где: .ua

Репутация: 8
Всего: 9



Сейчас нет времени искать ссылки или объяснять. Поищи в нете про "реляционные базы данных", "первичные ключи", "внешние ключи", "нормализацию", "индексы"


--------------------

Завтра - это самый загруженный день недели smile

user posted image

user posted image
PM MAIL ICQ   Вверх
Igor_K
Дата 11.8.2008, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 4.2.2008
Где: Kyiv

Репутация: нет
Всего: нет



С первычными ключами все понятно. Инжекс думаю нужно поставить на название тега. А от с обычными ключами не ясно. На каких полях ставить?
PM MAIL   Вверх
HackMan
Дата 11.8.2008, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Юзверь-программист
**


Профиль
Группа: Участник
Сообщений: 391
Регистрация: 18.6.2005
Где: .ua

Репутация: 8
Всего: 9



Имеешь в виду "внешние ключи"? Их надо ставить на поля, которыми связываешь одну таблицу с другой. В твоём случае это будут postid и tagid

Добавлено через 10 минут и 57 секунд
Замечу, что ставить их не обязательно. Эти ключи могут обеспечивать целостность данных, но в ущерб производительности. Если ты уверен, что у тебя никак случайно не могу попасть левые значения, или это не столь критично, тогда можно обойтись и без внешних ключей.

Цитата(Igor_K @  11.8.2008,  09:34 Найти цитируемый пост)
Инжекс думаю нужно поставить на название тега

Индекс - это упорядоченный указатель на записи в таблице. Единственное для чего они нужны - это для ускорения поиска записи по её индексированному полю. Следует понимать, что индекс не является частью таблицы. Эт отдельный объект, который связан с таблицей и другими объектами БД. Так что индекс вешай на те поля, которые будут использоваться для условия отбора (в хвостике WHERE).


--------------------

Завтра - это самый загруженный день недели smile

user posted image

user posted image
PM MAIL ICQ   Вверх
Igor_K
Дата 11.8.2008, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 4.2.2008
Где: Kyiv

Репутация: нет
Всего: нет



HackMan, спасибо за ответ. smile 

Индекс на название тега я хочу поставить потому что у меня будет поиск по названию тега.
PM MAIL   Вверх
HackMan
Дата 11.8.2008, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Юзверь-программист
**


Профиль
Группа: Участник
Сообщений: 391
Регистрация: 18.6.2005
Где: .ua

Репутация: 8
Всего: 9



На строковой тип данных есть особенность, надо указать, на сколько символов делать индекс. Чем больше укажешь - тем быстрее будет "искаться" и тем больше будет уходить памяти

Подробнее - в мануале, я спать хочу  smile 

Это сообщение отредактировал(а) HackMan - 11.8.2008, 10:20


--------------------

Завтра - это самый загруженный день недели smile

user posted image

user posted image
PM MAIL ICQ   Вверх
Igor_K
Дата 11.8.2008, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 4.2.2008
Где: Kyiv

Репутация: нет
Всего: нет



HackMan, спасибо за ответ еще раз! smile 
3 символов для индекса тегов думаю хватит. спасибо!

Спокойного сна!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0769 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.