2

我有类似的价值观

 | 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 拆分为表,然后对其执行查询,但我没有任何拆分的想法。有谁能够帮我???

提前感谢帮助..

4

3 回答 3

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    |
 ...
于 2013-09-06T11:59:33.103 回答
2

您可以使用FIND_IN_SET()函数或正则表达式:

SELECT * FROM t WHERE SkillsID REGEXP '(^|,)5($|,)'

但是您在一个字段中存储多个值违反了关系数据库原则。您应该创建一个链接表来正确存储它,并在其中为您的用户表创建一个外键。

于 2013-09-06T12:00:11.413 回答
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
于 2013-11-12T11:12:16.057 回答