MySQL и PHP теги - PullRequest
       42

MySQL и PHP теги

1 голос
/ 06 мая 2010

Я создаю веб-приложение. Я хочу поддерживать теги. Как настроить таблицу MySQL? Я хочу связать ссылку с различными тегами.

Ответы [ 3 ]

2 голосов
/ 06 мая 2010

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

Схема

Links
  LinkID
  Url
  Name

Tags
  TagID
  Name

LinkTags
  LinkID
  TagID

Пример данных:

Links
---------------------------------------------------
LinkID      URL                    Name
1           http://avira.com/      Avira Antivirus
2           http://microsoft.com/  Microsoft
---------------------------------------------------

Tags
---------------------------------------------------
TagID       Name
---------------------------------------------------
1           Software
2           Antivirus
3           Operating Systems
---------------------------------------------------

LinkTags
---------------------------------------------------
LinkID      TagID
---------------------------------------------------
1           1
1           2
2           1
2           3

Запросы

Ссылки и теги:

SELECT Links.*, GROUP_CONCAT(Tags.Name) AS TagList
FROM Links
LEFT JOIN LinkTags
  ON LinkTags.LinkID = Links.LinkID
LEFT JOIN Tags
  ON Tags.TagID = LinkTags.TagID
GROUP BY Links.LinkID

Десять самых популярных тегов:

SELECT Tags.*
FROM LinkTags
LEFT JOIN Tags
  ON Tags.TagID = LinkTags.TagID
GROUP BY LinkTags.TagID
ORDER BY (COUNT(LinkTags.LinkID)) DESC
LIMIT 10
1 голос
/ 06 мая 2010

CREATE TABLE links (
    id  int(10)
    ...

    ,primary key(id)
);

CREATE TABLE tags (
    id  int(10)
   ,tag varchar(20)

   ,primary key(id)
);

CREATE TABLE tagged_links (
    id   int(10)
   ,tag  int(10)
   ,link int(10)

   ,primary key(id)
   ,foreign key(tag) references tags(id)
   ,foreign key(link) references links(id)
);

0 голосов
/ 06 мая 2010

Вы можете сделать что-то вроде:

CREATE TABLE tags (
linkid int(10),
tag varchar(20),
primary key(linkid,tag)
);

Так что у вас будет набор (linkid, tag)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...