首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于从单个表中获取标签信息的sql查询

问用于从单个表中获取标签信息的sql查询
EN

Stack Overflow用户
提问于 2011-03-07 19:25:40
回答 2查看 329关注 0票数 1

我有一个表(Mysql),其中包含不同的代码片段,并以一列显示标签

代码语言:javascript
复制
table snippets
---------------
Id title source tag
1 "title"  "srouce code"  "Zend, Smarty"
2 "title2"  "srouce code2"  "Zend jquery"
3 "title3"  "srouce code3"  "doctrine"

我想做一个select语句,这样我就可以在我的网站上建立一个标签云。

代码语言:javascript
复制
Zend(2), smarty(1), jquery(1), doctrine(1)

请记住,标记并不总是用空格表示,有些标记用逗号(,)分隔

然后,我需要一个查询来获取具有特定tages的所有记录。我想我可以使用这样的东西,直到有更好的解决方案。

代码语言:javascript
复制
Select * from snippets where tag like "%ZEND%"

请寻找优化的解决方案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-07 19:52:48

创建三个表!

代码语言:javascript
复制
table snippets
id | title    | source_code
1    "title"    "srouce code" 
2    "title2"   "srouce code2" 
3    "title3"   "srouce code3" 

table tags
id | tag
1    "zend"
2    "smarty"
3    "doctrine"
4    "jquery"

table snippets_tags 
id | snippet_id | tag_id
1        1          1
2        1          2
3        2          1
4        2          4
5        3          3

zend提示:小写你的标签,因为"Zend“和"zend”是一样的

现在,您的标记云查询应该如下所示

代码语言:javascript
复制
SELECT tags.name, COUNT(snippets_tags.id) AS snippet_count 
   FROM tags LEFT JOIN snippets_tags ON snippets_tags.tag_id = tags.id 
      GROUP BY tags.id

为您提供如下结果

代码语言:javascript
复制
name  | snippet_count
zend         2
smarty       1
doctrine     1
jquery       1

要选择属于某个标记的所有代码段,请执行以下操作:

代码语言:javascript
复制
SELECT snippets.*  FROM snippets, tags, snippets_tags 
  WHERE 
    snippets_tags.snippets_id = snippet.id AND 
    snippets_tags.tag_id = tags.id AND 
    tags.name LIKE '%zend%'
票数 1
EN

Stack Overflow用户

发布于 2011-03-07 19:39:49

首先,您必须用固定的“分隔符”字符替换所有的字符,如“#”,空格等。你可以用一个临时表。

然后,您必须创建一个遍历字段并搜索和计算单个标记的函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5219089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档