2017-03-15 14 views
0

データベース:MySQL連結IDの値を連結する

私は2つのテーブルを持っています.1つはユーザの割り当てられたロール用で、もう1つはロール情報が含まれています。私の問題は、割り当てられた役割がコンマで区切られた単一のフィールドに格納されていることです。 idではなく名前でロールをリストするレポートを作成する必要がありますが、列で区切られた単一のフィールドには依然としてあります。

私はGROUP_CONCATが解決策かもしれないと思っていますが、連結リストを作成するのに使用されているのを見たことがあります。

表1:USERS

ID | FNAME | LNAME | ROLE_IDS 
------------------------------------------ 
1 | Bob | Jones | 445,44,45,449,459 
2 | Mark | Doe | 426,459,445 
3 | Jeff | Apple | 444,45 

は表2:ROLES

ID | ROLE_NAME 
------------------------------------ 
4 | Basic 
13 | Reporting 
16 | Advanced 
44 | Admin 
45 | Super User 
426 | Accounting 
444 | User 
445 | Receivables 
449 | Processing 
459 | Research 

予想されるクエリ結果:

ID | FNAME | LNAME | ROLES 
------------------------------------------- 
1 | Bob | Jones | Receivables, Admin, Super User, Processing, Research 
2 | Mark | Doe | Accounting, Research, Receivables 
3 | Jeff | Apple | User, Super User 
+0

注文を保存する必要がありますか? –

+0

いいえ、必ずしもそうではありません。私は一度私の結果があると思う、私はおそらく必要に応じて注文に取り組むことができます。 – N1tr0

+0

回答を投稿しました –

答えて

0

ロール名を参照取得するために、あなたはこのようなGROUP_CONCATを使用することができます。

SELECT us.ID,us.FNAME,us.LNAME, 
     GROUP_CONCAT(ro.ROLE_NAME) ROLES_NAME 
FROM USERS us 
     INNER JOIN ROLES ro 
      ON FIND_IN_SET(ro.ID, us.ROLE_IDS) > 0 
GROUP BY us.ID 

私はそれをSQLFIDDLEでテストし、正常に動作しています。

+0

ありがとうAkash!完璧に動作します。 – N1tr0