Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于逗号分隔值的mysql db查询_Mysql_Sql_Comma - Fatal编程技术网

用于逗号分隔值的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花费了更多的时间来获取记录。感谢您的帮助,它可以正常工作。我知道我违反了数据库规则,但联接需要更多的时间来获取记录。