用于逗号分隔值的mysql db查询
我有一些价值观用于逗号分隔值的mysql db查询,mysql,sql,comma,Mysql,Sql,Comma,我有一些价值观 | UserName | SkillsID | |------------|------------------| | Sohil | 1,2,15,16,19, | | Ankur | 5,8,14,19, | | Lalu | 4,3,14,15, | | Vinod | 5, | | Milind | 8,11
| 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拆分成表,然后对其执行查询,但我没有任何拆分的想法。有人能帮我吗
提前感谢帮助者。从不,从不,从不在一列中存储多个值!
正如你现在看到的,这只会导致问题。请先像这样规范化您的数据库结构
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 |
...
决不,决不,决不在一列中存储多个值!
正如你现在看到的,这只会导致问题。请先像这样规范化您的数据库结构
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 |
...
您可以使用function或regex执行此操作:
SELECT * FROM t WHERE SkillsID REGEXP '(^|,)5($|,)'
但在一个字段中存储多个值违反了关系数据库原则。您应该创建一个链接表以正确存储该链接表,并在其中为您的用户表创建一个外键。您可以使用function或regex:
SELECT * FROM t WHERE SkillsID REGEXP '(^|,)5($|,)'
但在一个字段中存储多个值违反了关系数据库原则。您应该创建一个链接表以正确存储该链接表,并在其中为您的用户表创建一个外键。您可以使用以下查询将值虚拟地分隔为不同的列,然后可以使用此查询作为子查询运行查询
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
您可以使用以下查询将值虚拟地分隔为不同的列,然后可以使用此查询作为子查询运行查询
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
谢谢你的帮助,它的工作。我知道我违反了数据库规则,但是Join花费了更多的时间来获取记录。感谢您的帮助,它可以正常工作。我知道我违反了数据库规则,但联接需要更多的时间来获取记录。