Задавайте вопросы, мы ответим
Вы не зашли.
Имеются 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 неприемлемо, слишком медленно.
Буду признателен за любой ответ в каком направлении двигаться.
Неактивен
Триггером пробовали?
Неактивен
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 является одинаковым для всех новых юзеров.
Неактивен
Что значит — передать при импорте в user? Вы же сказали, что значение
фиксированное? Фиксируйте его перед импортом, и будет Вам счастье.
Неактивен
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)
Неактивен
Решил путем добавления дополнительного поля `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 - этот "засранец" постоянно ругается на синтаксис, в результате куча потраченного времени и полного непонимания происходящего.
Неактивен