Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: SELECT в INSERT
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » SELECT в INSERT

Страниц (1): [1]
 

1. Viper - 15 Февраля, 2013 - 11:26:48 - перейти к сообщению
Собстно непонятка какая-то происходит.

Есть запрос вида
CODE (SQL):
скопировать код в буфер обмена
  1. INSERT INTO `bdp3c_webcon_rel_subscribers`
  2.             (`cid`, `sid`, `ordering`, `custom_subscr_params`, `is_active`)
  3. VALUES ('2', '15', '(SELECT MAX(`ordering`) FROM `bdp3c_webcon_rel_subscribers` WHERE `cid` = 2)', '{}', '0');


Строку то мускуль вставляет, но вот говорит
Цитата:
Incorrect integer value: '(SELECT MAX(`ordering`) FROM `bdp3c_webcon_rel_subscribers` WHERE `cid` = 2)' for column 'ordering' at row 1

С чем это связано?
2. EuGen - 15 Февраля, 2013 - 11:35:28 - перейти к сообщению
С тем, что вложенный запрос следует без кавычек в подобном синтаксисе указывать.
3. Viper - 15 Февраля, 2013 - 12:12:37 - перейти к сообщению
EuGen пишет:
без кавычек

You can't specify target table 'bdp3c_webcon_rel_subscribers' for update in FROM clause
4. EuGen - 15 Февраля, 2013 - 12:24:24 - перейти к сообщению
А, ну да, верно. Я не заметил, что Вы пытаетесь вставить данные с выборкой из одной и той же таблицы. Тогда, как вариант,
CODE (SQL):
скопировать код в буфер обмена
  1. SET @max=(SELECT MAX(`ordering`) FROM `bdp3c_webcon_rel_subscribers` WHERE `cid` = 2);
  2. INSERT INTO `bdp3c_webcon_rel_subscribers`
  3.                 (`cid`, `sid`, `ordering`, `custom_subscr_params`, `is_active`)
  4.     VALUES ('2', '15', @max, '{}', '0');
5. Viper - 15 Февраля, 2013 - 13:09:25 - перейти к сообщению
Все же прийдется на 2 отдельных запроса разбить. Ибо если SELECT возвращает null, то ошибка.
6. EuGen - 15 Февраля, 2013 - 17:19:52 - перейти к сообщению
Viper
Тогда IFNULL
7. tuareg - 15 Февраля, 2013 - 21:17:46 - перейти к сообщению
Можно и одним.
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. INSERT INTO `bdp3c_webcon_rel_subscribers`
  3.             (`cid`, `sid`, `ordering`, `custom_subscr_params`, `is_active`)
  4. VALUES ('2', '15', '(SELECT IFNULL(MAX(`ordering`),0) FROM `bdp3c_webcon_rel_subscribers` As t WHERE `cid` = 2)', '{}', '0');
  5.  

 

Powered by ExBB FM 1.0 RC1