Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.95/19: Рейтинг темы: голосов - 19, средняя оценка - 4.95
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522

insert в 3 таблицы за один запрос

05.01.2012, 05:55. Показов 3842. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет!
Возникла необходимость сохранения инфы в таблицы одновременно.
Имеется форма, часть записей нужно сохранить в первую таблицу (category), часть во вторую (subcategory) + еще id тока что добавленной записи в таблице category
и фотки сохраняются в 3-ью таблицу (photo) + также и сюда надо сохранить id последней записи таблицы category.
Т.о., получается запись в таблице category и связанные с ней записи (через родительский id) в двух других таблицах.

Можно конечно написать 3 запроса, получая через mysql_insert_id() id последней записи в таблице категорий, но хотелось бы одним запросом.
в сети узнал, что такое можно сотворить с помощью триггеров, но с ними к сожалению не знаком.

Можно ли решить эту задачу без триггеров одним запросом?
Если нет, то прошу показать решение уже с помощью триггеров.

Спасибо
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.01.2012, 05:55
Ответы с готовыми решениями:

Как объединить несколько INSERT в один запрос
Я с MySQL недавно... поэтому вопрос чайника. Как объединить несколько команд INSERT или REPLACE в один запрос? Допустим в...

Не получается выполнить за один запрос много операций INSERT
Вообщем так. Выполняю вот такой вот запрос. $this->mysqli->query('insert into storage(date_storage, object_one, relation,...

Как сделать INSERT запрос в связанные таблицы
Вот есть у меня, например, Таблица1 с полями "Код" и "Имя" и Таблица2 с полями "Код" и "Фамилия". Вот обычный INSERT я делаю...

25
 Аватар для Vovan-VE
13210 / 6601 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
07.01.2012, 08:39
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Love_and_Peace Посмотреть сообщение
Incorrect number of arguments for PROCEDURE house.ads; expected 27, got 23
Процедура требует 27 аргмунетов О_о, но передано было только 23.
0
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
07.01.2012, 08:50  [ТС]
Цитата Сообщение от Vovan-VE Посмотреть сообщение
Процедура требует 27 аргмунетов , но передано было только 23.
ну это понятно, поэтому я нипасал условие в процедуре, что если эти переменные не затронуты (=null), то INSERT в третью таблицу не производить.
Или условие надо написать в объявлении перемнных? если да, то как это сделать?
0
 Аватар для Vovan-VE
13210 / 6601 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
07.01.2012, 08:59
Цитата Сообщение от Love_and_Peace Посмотреть сообщение
что если эти переменные не затронуты (=null)
Надо все передавать явно. Не предусмотрено у них необязательных аргументов.
Цитата Сообщение от Love_and_Peace Посмотреть сообщение
SQL
1
IF photo1 != NULL OR photo2 != NULL OR
Все простые операции с NULL на выхлопе будут выдавать NULL. По крайней мере x != NULL всегду будет равно NULL (никогда не TRUE, и не FALSE). Для работы с NULL надо соответствующие операторы использовать:
SQL
1
IF photo1 IS NOT NULL  OR  photo2 IS NOT NULL  OR
Вообще надо в документацию чаще смотреть, мало ли где какие-то свои нюансы с NULL'ами.

Добавлено через 2 минуты
Цитата Сообщение от Vovan-VE Посмотреть сообщение
IF photo1 IS NOT NULL OR photo2 IS NOT NULL OR
Кстати, есть функция COALESCE(). Принимает любое количество аргмунетов. Возвращает значение первого не-NULL аргумента. Если все NULL, то возвратит NULL. Можно так написать:
SQL
1
2
3
4
5
IF COALESCE(photo1, photo2, photo3, photo4) IS NOT NULL THEN
  -- кто-то нашелся не-NULL
ELSE
  -- все NULL
END IF
2
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
07.01.2012, 09:18  [ТС]
та жа самая ошибка о не совпадении кол-ва переменных и полей
Условие такое
SQL
1
2
3
IF COALESCE(photos1, photos2, photos3, photos4) IS NOT NULL THEN 
    INSERT INTO `house_ads_photo_h` (`photo1`, `photo2`, `photo3`, `photo4`, `parent_ext`) VALUES (photos1, photos2, photos3, photos4, cid);
END IF;
Может мне при определении задавать условие? вот тутут
SQL
1
2
3
4
IN photos1 VARCHAR(100), 
IN photos2 VARCHAR(100),
IN photos3 VARCHAR(100),
IN photos4 VARCHAR(100)
Потому что в данной форме (для незарег-ых) я не передаю в SQL вабще никаких php-переменных связанных с sql-переменными photos1, ...
Можно ли написать условие при создании sql-переменных ? если да, то как расписать такое условие?
0
 Аватар для resource2008
111 / 112 / 18
Регистрация: 11.03.2011
Сообщений: 421
07.01.2012, 09:48
в данной форме (для незарег-ых) я не передаю в SQL вабще никаких php-переменных связанных с sql-переменными photos1
может тогда (раз уже есть проверка в процедуре) передать из php в процедуру вместо фото null-ы?
0
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
07.01.2012, 16:28  [ТС]
т.е., вы предлагаете передать в запрос 4 пустых php-переменных ?
Если такой дорогой пойти, можно и 2 хранимки написать для каждого из случаев.
Потому, что я передаю в запрос переменные, которые вабще нигде не участвуют, да и в самом запросе идут лишние проверки на то чего нет.
Заваруху с хранимками придумал, чтобы не писать 3 запроса, получая каждый раз mysql_insert_id, и тем самым выиграть время и память, а тут получается, я опять дополнительные условия ввожу, туповато получается.

Ниче не помогает, делаю и так
SQL
1
2
3
4
5
DECLARE photoss1, photoss2, photoss3, photoss4 VARCHAR(100);
      SET photoss1 = photos1; 
      SET photoss2 = photos2; 
      SET photoss3 = photos3; 
      SET photoss4 = photos4;
и дальше в INSERT переменные уже из SET.
Мускулу не нравится что кол-во передаваемых переменных меньше чем установленных.

Может есть возможность задавать условие на этапе установки sql-переменных?
в этом месте
SQL
1
2
3
4
IN photos1 VARCHAR(100), 
IN photos2 VARCHAR(100),
IN photos3 VARCHAR(100),
IN photos4 VARCHAR(100)
Делаю их по умолчанию NULL'выми, так
SQL
1
2
3
4
IN photos1 VARCHAR(100) DEFAULT NULL, 
IN photos2 VARCHAR(100) DEFAULT NULL,
IN photos3 VARCHAR(100) DEFAULT NULL,
IN photos4 VARCHAR(100) DEFAULT NULL
не получается
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.01.2012, 16:28

Составить запрос insert добавление для таблицы с ID
Здравствуйте, имеется таблица, которая содержит ID других таблиц(структуру базы смотреть во вложениях), хочу добавить туда новую запись, не...

Запрос на обновление, отняв один столбец из одной таблицы от другого столбца из другой таблицы
здравствуйте, как мне сделать запрос на обновление отняв один столбец из одной таблицы от другого столбца из другой таблицы?

Один запрос на 3 таблицы
Есть 3 таблицы.Ввожу данные в таблицу chast,ввожу данные в таблицу processor.В таблице comp_config должно быть так: столбец proces равен...

Один запрос на две таблицы
День добрый! У меня есть две таблицы t1 и t2. Могу ли я я в одном запросе вносить изменения в эти таблицы. например в таблице t1...

Перенос параметра при INSERT в другой запрос INSERT
Здравствуйте. Есть таблица Сlient, в которую при INSERT ClientID присваивается инкрементом. На этой же странице ниже прописываю второй...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru