Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2020, 13:51   #1
volni
Форумчанин
 
Регистрация: 16.03.2019
Сообщений: 188
По умолчанию MySQL составной запрос

Здравствуйте, как правильно сделать запрос такого типа:

Код:
UPDATE in_main SET SelectionDescription='$SelectionDescription', id=('SELECT MAX('id') FROM `in_main`'+1) WHERE DocumentNumber='$DocumentNumber'
А именно меня интересует строчка
Код:
 id=('SELECT MAX('id') FROM `in_main`'+1)
.
То есть мне нужно изменить id записи на последний id+1.

P.S. поле id автоинкремент, я бы использовал mysqli_insert_id, но оно работает, только если insert был использован в текущем подключении.
volni вне форума Ответить с цитированием
Старый 21.01.2020, 20:13   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

В силу особенностей вложенных запросов MySQL надо более сложно
Код:
id=(select x + 1 from (SELECT MAX(z.id) as x FROM in_main z) y)
Black Fregat вне форума Ответить с цитированием
Старый 22.01.2020, 11:34   #3
volni
Форумчанин
 
Регистрация: 16.03.2019
Сообщений: 188
По умолчанию

Цитата:
Сообщение от Black Fregat Посмотреть сообщение
В силу особенностей вложенных запросов MySQL надо более сложно
Код:
id=(select x + 1 from (SELECT MAX(z.id) as x FROM in_main z) y)
спасибо, а можно словесно описать, как это работает пожалуйста, чтобы я понимал?=)
volni вне форума Ответить с цитированием
Старый 22.01.2020, 14:59   #4
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

По логике SQL должно было сработать простое
Код:
id=(SELECT MAX(id) FROM in_main)+1
Но MySQL так не хочет, выдает ошибку
Код:
ERROR 1093 (HY000) at line 6: You can't specify target table 'in_main' for update in FROM clause
Интернет предлагает обернуть всё ещё одним уровнем вложенности, что и сделано. Это работает.
Black Fregat вне форума Ответить с цитированием
Старый 22.01.2020, 19:53   #5
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

ИМХО - менять вручную автоинкрементное поле - это как стрелять из пистолета себе в ногу.

Переосмыслите структуру таблицы и алгоритм - для чего вы это все задумали - и думаю, этот вопрос отпадет сам собой
ADSoft вне форума Ответить с цитированием
Старый 26.01.2020, 15:30   #6
Gronik
Форумчанин
 
Аватар для Gronik
 
Регистрация: 02.10.2018
Сообщений: 107
По умолчанию

Чтобы изменить автоинкремнтный номер нужно сначала отправить запрос на отключение автоинкремента, изменить номера как Вы хотите и включить автоинкремент. Типа:
PHP код:
mysql_query("ALTER TABLE `Имя Вашей таблицы` CHANGE `ID` `ID` INT(11) NOT NULL"$this->nmpdcl);/*Отключаем автоинкремент*/
mysql_query("ALTER TABLE `Имя Вашей таблицы` CHANGE `ID` `ID` INT(11) NOT NULL AUTO_INCREMENT;"$this->nmpdcl);/*Устанавливаем авоинкремент.*/ 
С уважением
Gronik
Gronik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос в MySQL Rose16 SQL, базы данных 0 27.05.2017 22:02
Составной запрос из одной таблицы Yoh SQL, базы данных 3 24.03.2015 09:51
Mysql Запрос Orionic SQL, базы данных 2 02.03.2012 21:33
MySQL запрос в PHP Ensoph PHP 2 07.11.2010 16:19
Составной запрос, как правильно составить? Bendebej SQL, базы данных 10 26.02.2010 20:01