Мне нужна логика для реализации запроса Mysql - PullRequest
0 голосов
/ 04 августа 2011

У меня есть 3 таблицы: 1. Пользователи - здесь «userd id» является первичным ключом 2. UserPermision - здесь «userd id» является внешним ключом и есть столбец «pageid» 3. Страница - здесь страницаid является первичным ключом

Теперь мне нужно написать запрос, когда я вставляю нового пользователя, скажем user id = "1", тогда этот идентификатор пользователя 1 должен быть вставлен в таблицу Userpermision, и для этого пользователя он должен иметь всестраницы из таблицы страниц.

Ответы [ 2 ]

1 голос
/ 04 августа 2011

Я предполагаю, что вы используете InnoDB.
В этом случае у вас есть ограничения внешнего ключа и транзакции.

Если нет, вам придется использовать триггеры.

START TRANSACTION;

INSERT INTO users (name, etc) VALUES ('test', 'remainder');

SELECT last_insert_id() INTO @my_user_id;

INSERT INTO userpermission (userid, permission, pageid) 
  SELECT 
    @my_user_id as user_id
    , 'all' as permission
    , pageid 
  FROM pages 
  WHERE pages.userid = @my_user_id;

COMMIT;

Предполагается, что вы уже создали страницы для этого пользователя.

ссылка
http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html

0 голосов
/ 04 августа 2011

Вам нужно два запроса INSERT, по одному для каждой таблицы.

INSERT INTO Users (user_id,...) VALUES (:user_id,...)

INSERT INTO UserPermission (user_id,page_id)
SELECT :user_id, page_id FROM Page

Вы можете выполнить их в рамках одной транзакции или выполнить второй из триггера AFTER INSERT в таблице Users.*

...