ठीक है, आप इन पंक्तियों के साथ कुछ करने की कोशिश कर सकते हैं:
यह परीक्षण सेटअप है:
mysql> select * from table1;
+------+------------+
| id | permission |
+------+------------+
| a1 | 1, 2, 3, 4 |
| v2 | 2, 3, 4 |
+------+------------+
2 rows in set (0.01 sec)
mysql> select * from table2;
+------+------------+
| id | permission |
+------+------------+
| 1 | Allow |
| 2 | Not Allow |
| 3 | Disabled |
+------+------------+
3 rows in set (0.01 sec)
mysql> select id, GROUP_CONCAT(t2perm) from (SELECT t1.*, t2.id as t2id, t2.permission as t2perm from table2 t2 cross join table1 t1) crs where INSTR(permission, t2id) > 0 group by id;
+------+--------------------------+
| id | GROUP_CONCAT(t2perm) |
+------+--------------------------+
| a1 | Allow,Not Allow,Disabled |
| v2 | Not Allow,Disabled |
+------+--------------------------+
2 rows in set (0.00 sec)
थोड़ा समझाने के लिए; पहले आप दोनों तालिकाओं को पार करते हैं और इसका परिणाम कार्टेशियन उत्पाद होना चाहिए, जैसे:
mysql> SELECT * from table2 cross join table1;
+------+------------+------+------------+
| id | permission | id | permission |
+------+------------+------+------------+
| 1 | Allow | a1 | 1, 2, 3, 4 |
| 1 | Allow | v2 | 2, 3, 4 |
| 2 | Not Allow | a1 | 1, 2, 3, 4 |
| 2 | Not Allow | v2 | 2, 3, 4 |
| 3 | Disabled | a1 | 1, 2, 3, 4 |
| 3 | Disabled | v2 | 2, 3, 4 |
+------+------------+------+------------+
6 rows in set (0.00 sec)
उस बिंदु से, केवल उन पंक्तियों का चयन करें जिनमें एक स्ट्रिंग दूसरे में निहित है (INSTR (अनुमति, t2id) => आईडी पर मैपिंग अनुमतियां), आप इसके साथ समाप्त हो जाएंगे:
mysql> select * from (SELECT t1.*, t2.id as t2id, t2.permission as t2perm from table2 t2 cross join table1 t1) crs where INSTR(permission, t2id) > 0;
+------+------------+------+-----------+
| id | permission | t2id | t2perm |
+------+------------+------+-----------+
| a1 | 1, 2, 3, 4 | 1 | Allow |
| a1 | 1, 2, 3, 4 | 2 | Not Allow |
| v2 | 2, 3, 4 | 2 | Not Allow |
| a1 | 1, 2, 3, 4 | 3 | Disabled |
| v2 | 2, 3, 4 | 3 | Disabled |
+------+------------+------+-----------+
5 rows in set (0.00 sec)
अभी GROUP_CONCAT के साथ परिणामों को समेकित करें...
select id, GROUP_CONCAT(t2perm) from (SELECT t1.*, t2.id as t2id, t2.permission as t2perm from table2 t2 cross join table1 t1) crs where INSTR(permission, t2id) > 0 group by id;