是否可以选择逗号分隔列中的确切单词?
标签:php,web,webdevelopment,java,javascript
'SELECT * FROM table WHERE tags LIKE "%java%"'
这将选择“java”和“javascript”
是否可以只选择“java”?
感谢。
答案 0 :(得分:2)
您可以{/ 3}}使用
select * from your_table
where find_in_set('java', tags) > 0
更好的数据库设计
posts table
-----------
id
title
body
...
tags table
----------
id
name
...
post_tags table
---------------
post_id
tag_id
然后,您可以查询具有java
标签的帖子,例如
select p.*
from posts p
join post_tags pt on pt.post_id = p.id
join tags t on pt.tag_id = t.id
where t.name = 'java'
更清洁,更容易,也更快。
答案 1 :(得分:1)
MySql支持regular expressions,正则表达式支持字边界:
SELECT * FROM table WHERE tags REGEXP '[[:<:]]java[[:>:]]';
答案 2 :(得分:1)
首先,您应该将标记存储在联结表中,每个标记和每个标记都有一行。这是在SQL中存储列表的正确方法。
另一个答案显示了如何使用find_in_set()
。如果您热衷于使用like
,则可以执行以下操作:
WHERE CONCAT(',', tags, ',') LIKE "%,java,%"'
虽然性能应与MySQL中的find_in_set()
类似,但此方法的唯一优势是它可以在更多数据库中使用。但是,让我重复一遍,正确的做法是修复数据结构以建立联结表,而不是将列表存储在字符串列中。
答案 3 :(得分:1)
1NF:每个属性的域仅包含原子值。 重新设计您的表以支持1NF。 编辑:当您想要更新列时,您认为会发生什么?或者你想从表中删除java?当遵循规范化规则时,访问,删除和更新行要容易得多。
答案 4 :(得分:0)
在我之前给出的另一个答案是好的,但我有另一个我想分享的解决方案。
SELECT * FROM table WHERE tags LIKE "java" OR tags LIKE "%,java," OR tags LIKE "java,%"
这意味着列中可以有4个条件:
tags列只有java在其中
标签列可能有,java,在其中
tags列只有java,在其中
有用的链接:http://www.w3schools.com/sql/sql_like.asp
我希望这会对你有所帮助。