2012-08-04 3 views
0

phppos_permissions_actions 테이블을 채우기 위해 (두 버전의 프로그램 사이에서) 마이그레이션 스크립트를 작성하려고합니다.복잡한 MySQL 삽입 쿼리

채우기 규칙은 다음과 같습니다. "사용자가 모듈 (phppos_permissions 기준)에 대한 권한을 가지고 있으면 해당 모듈에 대한 모든 작업 권한이 부여됩니다 (phppos_module_actions에서 조회 할 수 있음)."

다음 규칙이 적용되는 쿼리 또는 쿼리 집합을 작성하려고합니다. 누군가 올바른 방향으로 나를 안내 할 수 있습니까? 다음은 내 스키마

insert phppos_permissions_actions (module_id, person_id, action_id) 
select distinct 
    phppos_permissions.module_id, phppos_permissions.person_id, action_id 
from phppos_permissions 
    inner join phppos_modules_actions on phppos_permissions.module_id = phppos_modules_actions.module_id 
order by module_id, person_id 

이 문제 해결에 도움이 되었습니까

mysql> describe phppos_modules; 
+---------------+--------------+------+-----+---------+-------+ 
| Field   | Type   | Null | Key | Default | Extra | 
+---------------+--------------+------+-----+---------+-------+ 
| name_lang_key | varchar(255) | NO | UNI | NULL |  | 
| desc_lang_key | varchar(255) | NO | UNI | NULL |  | 
| sort   | int(10)  | NO |  | NULL |  | 
| module_id  | varchar(255) | NO | PRI | NULL |  | 
+---------------+--------------+------+-----+---------+-------+ 
4 rows in set (0.01 sec) 

mysql> select * from phppos_modules; 
+-------------------+------------------------+------+------------+ 
| name_lang_key  | desc_lang_key   | sort | module_id | 
+-------------------+------------------------+------+------------+ 
| module_config  | module_config_desc  | 100 | config  | 
| module_customers | module_customers_desc | 10 | customers | 
| module_employees | module_employees_desc | 80 | employees | 
| module_giftcards | module_giftcards_desc | 90 | giftcards | 
| module_item_kits | module_item_kits_desc | 30 | item_kits | 
| module_items  | module_items_desc  | 20 | items  | 
| module_receivings | module_receivings_desc | 60 | receivings | 
| module_reports | module_reports_desc | 50 | reports | 
| module_sales  | module_sales_desc  | 70 | sales  | 
| module_suppliers | module_suppliers_desc | 40 | suppliers | 
+-------------------+------------------------+------+------------+ 
10 rows in set (0.00 sec) 
mysql> describe phppos_modules_actions; 
+-----------------+--------------+------+-----+---------+-------+ 
| Field   | Type   | Null | Key | Default | Extra | 
+-----------------+--------------+------+-----+---------+-------+ 
| action_id  | varchar(255) | NO | PRI | NULL |  | 
| module_id  | varchar(255) | NO | PRI | NULL |  | 
| action_name_key | varchar(255) | NO |  | NULL |  | 
| sort   | int(11)  | NO |  | NULL |  | 
+-----------------+--------------+------+-----+---------+-------+ 
4 rows in set (0.00 sec) 

mysql> 

mysql> select * from phppos_modules_actions; 
+----------------+-----------+--------------------------------+------+ 
| action_id  | module_id | action_name_key    | sort | 
+----------------+-----------+--------------------------------+------+ 
| add_update  | customers | module_action_add_update  | 1 | 
| add_update  | employees | module_action_add_update  | 130 | 
| add_update  | item_kits | module_action_add_update  | 70 | 
| add_update  | items  | module_action_add_update  | 40 | 
| add_update  | suppliers | module_action_add_update  | 100 | 
| delete   | customers | module_action_delete   | 20 | 
| delete   | employees | module_action_delete   | 140 | 
| delete   | item_kits | module_action_delete   | 80 | 
| delete   | items  | module_action_delete   | 50 | 
| delete   | suppliers | module_action_delete   | 110 | 
| search   | customers | module_action_search_customers | 30 | 
| search   | employees | module_action_search_employees | 150 | 
| search   | item_kits | module_action_search_item_kits | 90 | 
| search   | items  | module_action_search_items  | 60 | 
| search   | suppliers | module_action_search_suppliers | 120 | 
| see_cost_price | items  | module_see_cost_price   | 61 | 
+----------------+-----------+--------------------------------+------+ 
16 rows in set (0.00 sec) 


mysql> describe phppos_permissions 
    -> ; 
+-----------+--------------+------+-----+---------+-------+ 
| Field  | Type   | Null | Key | Default | Extra | 
+-----------+--------------+------+-----+---------+-------+ 
| module_id | varchar(255) | NO | PRI | NULL |  | 
| person_id | int(10)  | NO | PRI | NULL |  | 
+-----------+--------------+------+-----+---------+-------+ 
2 rows in set (0.00 sec) 

mysql> select * from phppos_permissions; 
+------------+-----------+ 
| module_id | person_id | 
+------------+-----------+ 
| config  |   1 | 
| customers |   1 | 
| employees |   1 | 
| giftcards |   1 | 
| item_kits |   1 | 
| items  |   1 | 
| receivings |   1 | 
| reports |   1 | 
| sales  |   1 | 
| suppliers |   1 | 
| sales  |  301 | 
| sales  |  741 | 
| config  |  759 | 
| customers |  759 | 
| employees |  759 | 
| giftcards |  759 | 
| item_kits |  759 | 
| items  |  759 | 
| receivings |  759 | 
| reports |  759 | 
| sales  |  759 | 
| suppliers |  759 | 
| sales  |  776 | 
+------------+-----------+ 
23 rows in set (0.00 sec) 


mysql> describe phppos_permissions_actions; 
+-----------+--------------+------+-----+---------+-------+ 
| Field  | Type   | Null | Key | Default | Extra | 
+-----------+--------------+------+-----+---------+-------+ 
| module_id | varchar(255) | NO | PRI | NULL |  | 
| person_id | int(11)  | NO | PRI | NULL |  | 
| action_id | varchar(255) | NO | PRI | NULL |  | 
+-----------+--------------+------+-----+---------+-------+ 
3 rows in set (0.00 sec) 

mysql> 

답변

1

입니까?

+0

위대한 작품! 왜 뚜렷이 필요합니까? –

+0

그렇지 않을 수도 있습니다. 데이터 세트에 따라 다름 – podiluska