只喜欢 select 确切的关键字
LIKE to select only the exact keyword
是否可以 SELECT LIKE 逗号分隔列中的确切单词?
标签:php、网络、网络开发、java、java脚本
'SELECT * FROM table WHERE tags LIKE "%java%"'
这将 select "java" 和 "javascript"
是否可以 select 仅 "java"?
谢谢。
你可以使用 FIND_IN_SET
select * from your_table
where find_in_set('java', tags) > 0
但实际上您应该更改 table 定义。切勿在单个列中存储多个值。
更好的数据库设计是
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'
那更干净、更容易,也非常快。
摆在我面前的另一个答案很好,但我有另一个解决方案,我想分享一下。
SELECT * FROM table WHERE tags LIKE "java" OR tags LIKE "%,java," OR tags LIKE "java,%"
这只是意味着该列中可以有 4 个条件:
tags 列中只有 java
tags 列可能有 ,java, in it
tags 列只有 java, in it
有用link:http://www.w3schools.com/sql/sql_like.asp
希望对您有所帮助。
MySql支持regular expressions,正则表达式支持分词:
SELECT * FROM table WHERE tags REGEXP '[[:<:]]java[[:>:]]';
首先,您应该将标签存储在联结点 table 中,每个标签一行。这是在 SQL.
中存储列表的正确方法
另一个答案显示了如何使用 find_in_set()
。如果你热衷于使用 like
,你可以这样做:
WHERE CONCAT(',', tags, ',') LIKE "%,java,%"'
虽然性能应该和MySQL中的find_in_set()
差不多,但这种方法唯一的优点是它可以在更多的数据库中工作。不过,让我重复一遍,正确的做法是修复数据结构以具有连接 table 而不是将列表存储在字符串列中。
1NF:每个属性的域只包含原子值。
重新设计您的 table 以支持 1NF。
编辑:当您想更新专栏时,您认为会发生什么?或者您想从 table 中删除 java?当行遵循规范化规则时,访问、删除和更新行要容易得多。
是否可以 SELECT LIKE 逗号分隔列中的确切单词?
标签:php、网络、网络开发、java、java脚本
'SELECT * FROM table WHERE tags LIKE "%java%"'
这将 select "java" 和 "javascript"
是否可以 select 仅 "java"?
谢谢。
你可以使用 FIND_IN_SET
select * from your_table
where find_in_set('java', tags) > 0
但实际上您应该更改 table 定义。切勿在单个列中存储多个值。
更好的数据库设计是
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'
那更干净、更容易,也非常快。
摆在我面前的另一个答案很好,但我有另一个解决方案,我想分享一下。
SELECT * FROM table WHERE tags LIKE "java" OR tags LIKE "%,java," OR tags LIKE "java,%"
这只是意味着该列中可以有 4 个条件:
tags 列中只有 java
tags 列可能有 ,java, in it
tags 列只有 java, in it
有用link:http://www.w3schools.com/sql/sql_like.asp
希望对您有所帮助。
MySql支持regular expressions,正则表达式支持分词:
SELECT * FROM table WHERE tags REGEXP '[[:<:]]java[[:>:]]';
首先,您应该将标签存储在联结点 table 中,每个标签一行。这是在 SQL.
中存储列表的正确方法另一个答案显示了如何使用 find_in_set()
。如果你热衷于使用 like
,你可以这样做:
WHERE CONCAT(',', tags, ',') LIKE "%,java,%"'
虽然性能应该和MySQL中的find_in_set()
差不多,但这种方法唯一的优点是它可以在更多的数据库中工作。不过,让我重复一遍,正确的做法是修复数据结构以具有连接 table 而不是将列表存储在字符串列中。
1NF:每个属性的域只包含原子值。 重新设计您的 table 以支持 1NF。 编辑:当您想更新专栏时,您认为会发生什么?或者您想从 table 中删除 java?当行遵循规范化规则时,访问、删除和更新行要容易得多。