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

複数の値を 1 つの列に格納しないでください。

ご覧のとおり、これは問題を引き起こすだけです。このように最初にDB構造を正規化してください

 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($|,)'

しかし、1 つのフィールドに複数の値を格納することで、リレーション DB の原則に違反しています。それを適切に格納するためのリンクテーブルを作成し、その中にユーザーテーブルへの外部キーを作成する必要があります。

于 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 に答える