Py学习  »  DATABASE

mysql&php标签

Francesc • 4 年前 • 268 次点击  

我正在创建一个webapp。我想支持标签。如何设置MySQL表?我想把一个链接与各种标签联系起来。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38298
 
268 次点击  
文章 [ 3 ]  |  最新文章 4 年前
Mitch Dempsey
Reply   •   1 楼
Mitch Dempsey    13 年前

你可以这样做:

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

所以您将拥有(linkid,tag)的元组

mmattax
Reply   •   2 楼
mmattax    13 年前

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)
);

Marcus Adams
Reply   •   3 楼
Marcus Adams    13 年前

以下格式允许每个链接具有多个标记,并允许链接共享相同的标记。这使您可以轻松地查看哪些链接很受欢迎,同时避免存储重复的标记。

图式

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