我有一个表(Mysql),其中包含不同的代码片段,并以一列显示标签
table snippets
---------------
Id title source tag
1 "title" "srouce code" "Zend, Smarty"
2 "title2" "srouce code2" "Zend jquery"
3 "title3" "srouce code3" "doctrine"我想做一个select语句,这样我就可以在我的网站上建立一个标签云。
Zend(2), smarty(1), jquery(1), doctrine(1)请记住,标记并不总是用空格表示,有些标记用逗号(,)分隔
然后,我需要一个查询来获取具有特定tages的所有记录。我想我可以使用这样的东西,直到有更好的解决方案。
Select * from snippets where tag like "%ZEND%"请寻找优化的解决方案。
发布于 2011-03-07 19:52:48
创建三个表!
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 3zend提示:小写你的标签,因为"Zend“和"zend”是一样的
现在,您的标记云查询应该如下所示
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为您提供如下结果
name | snippet_count
zend 2
smarty 1
doctrine 1
jquery 1要选择属于某个标记的所有代码段,请执行以下操作:
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%'发布于 2011-03-07 19:39:49
首先,您必须用固定的“分隔符”字符替换所有的字符,如“#”,空格等。你可以用一个临时表。
然后,您必须创建一个遍历字段并搜索和计算单个标记的函数。
https://stackoverflow.com/questions/5219089
复制相似问题