一个字,我有喜欢的文字填入称为意愿数据库字段:SQL查询场内
shopping,pool,pc,games
shopping,pool,pc,games
swimming, pool, pc, games
我需要查询其中有“购物”里面的Fileds SQL查询?
TY
一个字,我有喜欢的文字填入称为意愿数据库字段:SQL查询场内
shopping,pool,pc,games
shopping,pool,pc,games
swimming, pool, pc, games
我需要查询其中有“购物”里面的Fileds SQL查询?
TY
,应该是够了:
select *
from table
where willingness like '%shopping%'
这将在SQL Server工作
可以使用LIKE运营商用于这一目的。例如,
SELECT * FROM myTable
WHERE willingness LIKE '%shopping%'
但是,如果字段被简单地存储逗号分隔的标签列表,您可能需要更改架构,而不是 - 因为它的立场,该模式不被标准化。例如,该表可能有UserId
和WillingnessTagId
列与适当的外键。
SELECT * FROM表1,其中愿意LIKE '%购物%'
非常低效的,因为这确实应该是normalized,但应该工作:
SELECT *
FROM table
WHERE willingness LIKE '%shopping%'
在规范化的数据库,你将有一个对于每个(对于购物来说为1)的意愿表和对该查找表的foreign key。那么查询会更高效:
SELECT *
FROM table
WHERE willingness_id = 1
这就是为什么我们正常化。
AND (willingness = 'shopping'
OR willingness like 'shopping,%'
OR willingness like '%,shopping'
OR willingness like '%,shopping,%'
OR willingness like '%, shopping'
OR willingness like '%, shopping,%')
这应该做的工作:
select willingness from table where willingness LIKE '%shopping%'
我recommands你阅读有关字符串比较在MYSQL语句中: http://dev.mysql.com/doc/refman/5.0/fr/string-comparison-functions.html
我假设你使用MySQL,如果不是,请告诉我们你在用什么。
您不应该像这样将数据存储在数据库中。让我来解释:
您可以使用它的人在这里提到的解决方案(like %shopping%
等),但你从字面上找麻烦这种方式。
阅读正常化。取而代之的是willingness
场的,你可以有一个willingness
表,看起来在某种程度上是这样的:
person_id willing
1 pool
2 shopping
2 pool
3 swimming
3 games
等等
然后你只需要像select distinct person_id from willingness where willing = "pool"
查询。就是这样 - 更安全,可能更快。
以何种不可用形式存储数据的原因是什么? – zerkms 2010-11-13 08:54:21
它从RSS的现场数据,不是我做的 – webmasters 2010-11-13 09:04:29
所以并分割它,当您解析饲料。 – 2010-11-13 09:05:28