Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Ответ
 
Опции темы
Старый 21.01.2020, 14:51   #1
volni
Форумчанин
 
Регистрация: 16.03.2019
Сообщений: 154
По умолчанию 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, 21:13   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,637
По умолчанию

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

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

По логике 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, 20:53   #5
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 3,530
По умолчанию

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

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

Чтобы изменить автоинкремнтный номер нужно сначала отправить запрос на отключение автоинкремента, изменить номера как Вы хотите и включить автоинкремент. Типа:
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 вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


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