在表tags
中,我有字段id
。在表tastings
中,我有一个字段tags
,这是一个以逗号分隔的ID号列表,例如2,4,5
。数据库是MySQL。
现在我想计算每个标签总共使用了多少次。但我被LIKE部分困住了。我尝试了以下方法,都给出了语法错误:
SELECT tags.id, tag, FROM tags, tastings WHERE tags LIKE tags.id + '%'
SELECT tags.id, tag, FROM tags, tastings WHERE tags LIKE tags.id & '%'
SELECT tags.id, tag, FROM tags, tastings WHERE tags LIKE CONCAT(tags.id, '%')
我做错了什么?
答案 0 :(得分:7)
如果您发布错误,我会帮助您,但在选择列表后面有一个额外的逗号。此外,您可能需要限定tags
,因为它既是表格又是列。
试试这个:
SELECT tags.id, tag
FROM tags, tastings
WHERE tastings.tags LIKE CONCAT('%', tags.id, '%')
或更好,使用新的连接语法:
SELECT tags.id, tag
FROM tags
JOIN tastings on tastings.tags LIKE CONCAT('%', tags.id, '%')
请注意%
中tag.id的夹心,以便在其中找到ID。
警告:当标记为4
(13,14,15
中有4
)时,此联接将会显示为14
,因此,除非您的ID都小于10,否则我需要重新考虑你的加入标准。
答案 1 :(得分:1)
您尚未指定DBMS,因此我猜测支持的内容。
怎么样
SELECT tags.id, tastings.tag
FROM tags
INNER JOIN tastings
ON tastings.tags like '%' + tags.id + '%'
这应该有效(再次,取决于你的DBMS),但你应该真正规范化你的数据,这种类型的东西实际上不会扩展/表现良好。
答案 2 :(得分:1)
尝试以下查询。
select t.id , count(t.id) from tag t , tastings tas where tas.tags like '%' ||t.id||'%'
group by t.id;