我有像某些东西的价值
| UserName | SkillsID |
|------------|------------------|
| Sohil | 1,2,15,16,19, |
| Ankur | 5,8,14,19, |
| Lalu | 4,3,14,15, |
| Vinod | 5, |
| Milind | 8,11 |
现在我想搜索已经获得SkillsID = 5然后结果
的用户 | UserName | SkillsID |
|------------|------------------|
| Ankur | 5,8,14,19, |
| Vinod | 5, |
我的查询将如何?
我曾考虑将SkillsID拆分为表格&然后对它执行查询,但我不知道分裂。任何人都可以帮助我吗?
提前感谢帮助者..
答案 0 :(得分:2)
如您所见,这只会导致问题。请首先像这样标准化您的数据库结构
User table
+-------------------+
| userid | username |
+-------------------+
| 1 | Sohil |
| 2 | Ankur |
+-------------------+
skill table
--------------------
| Userid| SkillID |
|-------|----------|
| 1 | 1 |
| 1 | 2 |
| 1 | 15 |
| 1 | 16 |
...
| 2 | 5 |
| 2 | 8 |
| 2 | 14 |
...
答案 1 :(得分:2)
您可以使用FIND_IN_SET()函数或正则表达式执行此操作:
SELECT * FROM t WHERE SkillsID REGEXP '(^|,)5($|,)'
但是你违反了关系数据库原则,在一个字段中存储了多个值。您应该创建一个链接表来正确存储它,并为其中的用户表创建一个外键。
答案 2 :(得分:0)
您可以使用以下查询将值虚拟地分成不同的列,然后您可以使用此查询作为子查询运行查询。
select
substring_index(column_name,',',1) c1,
substr(column_name,length(substring_index(column_name,',',1))+2,length(substring_index(column_name,',',2))-length(substring_index(column_name,',',1))-1) c2,
substr(column_name,length(substring_index(column_name,',',2))+2,length(substring_index(column_name,',',3))-length(substring_index(column_name,',',2))-1) c3,
substr(column_name,length(substring_index(column_name,',',3))+2,length(substring_index(column_name,',',4))-length(substring_index(column_name,',',3))-1) c4,
substr(column_name,length(substring_index(column_name,',',4))+2,length(substring_index(column_name,',',5))-length(substring_index(column_name,',',4))-1) c5,
substr(column_name,length(substring_index(column_name,',',5))+2,length(substring_index(column_name,',',6))-length(substring_index(column_name,',',5))-1) c6
from table_name