在用户可以向数据库添加任何内容之前,我正在尝试检查单元格country
中是否存在国家/地区代码。因此,如果国家代码不存在,他将无法添加任何内容。
我将国家/地区代码存储为逗号分隔值。列类型为VARCHAR。
"id" "rtype" "country"
"1" "0" "US,UK,SE,CA"
"2" "1" "US"
"3" "2" "UK"
我运行了以下查询,但这不会产生任何行。哪里出错了?问题是,此查询需要以逗号分隔值和单个值运行。
select id, rtype from test where id=1 and country in('US')
预期结果
id | rType
1 | 0
select id, rtype from test where id=2 and country in('US')
预期结果
id | rType
2 | 0
答案 0 :(得分:3)
试试这个:
SELECT id, rtype FROM test
WHERE FIND_IN_SET('US', country) > 0
这就是FIND_IN_SET(str,strlist)
函数的工作原理:
如果字符串str位于由N个子字符串组成的字符串列表strlist中,则返回1到N范围内的值。字符串列表是由用“,”字符分隔的子字符串组成的字符串。 [...]如果str不在strlist中,或者strlist是空字符串,则返回0。
答案 1 :(得分:1)
MySQL有一个非常好的Set Datatype。它非常有效,可以存储到255个值的64个不同成员。我不知道你是否可以改变你的列类型,但它可以解决很多问题:
您可以使用FIND_IN_SET功能进行搜索。
答案 2 :(得分:0)
由于国家/地区代码是逗号分隔值,因此无法直接使用。 你可以喜欢。
从测试中选择id,rtype,例如'%US%'