SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 04.05.2011 22:20:11

Tartyga
Участник
Зарегистрирован: 04.05.2011
Сообщений: 9

Insert в две таблицы

Имеются 3 таблицы

TABLE `user`
  `id` auto_increment
  `name`
   ...........

TABLE `list`
  `id`
  `title`

и таблица связей

TABLE links
  `user_id`
  `list_id`

Вопрос в следующем: в таблицу `user` вставляются данные (примерно 500 - 1000).
Необходимо при вставке создать в таблице `links` запись с `user_id`=`user`.`id` и `list_id` равным заведомо известному `id` из `list`.

Выполнять вставку циклом в php неприемлемо, слишком медленно.

Буду признателен за любой ответ в каком направлении двигаться.

Неактивен

 

#2 04.05.2011 23:05:23

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Insert в две таблицы

Триггером пробовали?

Неактивен

 

#3 05.05.2011 00:58:40

Tartyga
Участник
Зарегистрирован: 04.05.2011
Сообщений: 9

Re: Insert в две таблицы

paulus написал:

Триггером пробовали?

Пробовал:

CREATE TRIGGER set_link
AFTER INSERT ON user
FOR EACH ROW
INSERT INTO links SET user_id = NEW.id

А, вот, как тут передать указатель какому листу принадлежит юзер, ни как не соображу?
То есть: INSERT INTO links (`user_id`,`list_id`) VALUES (user_id = NEW.id, list_id = значение из таблицы list, которое нужно передать при импорте данных в user)
причем list_id является одинаковым для всех новых юзеров.

Неактивен

 

#4 05.05.2011 01:43:02

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Insert в две таблицы

Что значит — передать при импорте в user? Вы же сказали, что значение
фиксированное? Фиксируйте его перед импортом, и будет Вам счастье.

Неактивен

 

#5 05.05.2011 02:33:13

Tartyga
Участник
Зарегистрирован: 04.05.2011
Сообщений: 9

Re: Insert в две таблицы

paulus написал:

Что значит — передать при импорте в user? Вы же сказали, что значение
фиксированное? Фиксируйте его перед импортом, и будет Вам счастье.

Уточняю!!
К примеру, 5 листов, мы добавляем 200 узеров в третий лист `list` (id=3), следовательно заноситься 200 записей в `user` и 200 в `links` где user_id = NEW.id, а list_id = 3
Так как мне передать, что все импортируемые юзеры относятся к 3-му листу?

Сейчас я вставляю данные простым инсертом

INSERT IGNORE INTO user (name,...) VALUES ('Vasya',...),('Petya',...) ... ('Kolya',...)

Отредактированно Tartyga (05.05.2011 02:39:02)

Неактивен

 

#6 05.05.2011 13:31:07

Tartyga
Участник
Зарегистрирован: 04.05.2011
Сообщений: 9

Re: Insert в две таблицы

Решил путем добавления дополнительного поля `list_tmp` в `user` куда и передаю `list_id`.
Не совсем правильно как мне кажется, все таки, лишнее поле, которое в последствии ни как не пригодится, но зато работает, и довольно быстро.

TABLE `user`
  `id` auto_increment,
  `name`,
  `list_tmp`,
   ...........

TABLE `list`
  `id`,
  `title`

таблица связей

TABLE links
  `user_id`,
  `list_id`

CREATE TRIGGER set_link
AFTER INSERT ON user
FOR EACH ROW
  BEGIN
   IF NEW.name IS NOT NULL
    THEN INSERT INTO links (`user_id`,`list_id`) VALUES (NEW.id,NEW.list_tmp);
   ENDIF;
  END;

На всякий случай скажу, может у кого то, тоже возникнет проблема с триггерами.
Не используйте phpMyAdmin - этот "засранец" постоянно ругается на синтаксис, в результате куча потраченного времени и полного непонимания происходящего.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson