MySQL: Вставить новую запись, используя МАКСИМАЛЬНОЕ значение столбца в той же таблице

#php #mysql

#php #mysql

Вопрос:

Мне нужно INSERT создать новую запись, используя MAX значение столбца позиции плюс один, во вновь вставленной строке. Итак, если MAX значение равно 14, значение столбца позиции следующей вставленной строки должно быть 15.

Это мой текущий код, который работает, но для него требуется 2 отдельных запроса:

 # get position order
$sql = 'SELECT MAX(position) FROM store_item_photo WHERE id_item = 3';
$stmt = cnn()->prepare($sql);
$stmt->execute();
$position = $stmt->fetchColumn();
$position  ;

# photo: new record
$sql = 'INSERT INTO store_item_photo (id_item, position) VALUES (3, :position)';
$stmt = cnn()->prepare($sql);
$stmt->bindValue(':position', $position, PDO::PARAM_INT);
$stmt->execute();
  

Я хотел знать, есть ли какой-нибудь способ достичь того же результата всего одним запросом:

 # photo: new record (one query)
$sql = 'INSERT INTO store_item_photo (id_item, position) VALUES (3, (SELECT MAX(position) FROM store_item_photo WHERE id_item = 3)   1)';
$stmt = cnn()->prepare($sql);
$stmt->execute();
  

Этот тест выдает ошибку. Возможно ли достичь этого с помощью аналогичного подхода?

Я построил схему в sqlfiddle: http://sqlfiddle.com /#!22.98058/1

Комментарии:

1. Подсказка: вставить в x (a, b, c), выбрать a, b, c из y; — но обратите внимание на обычные оговорки о хранении производных данных

Ответ №1:

Если вы хотите использовать подзапрос при вставке, вам не обязательно использовать VALUES

Попробуйте этот запрос:

 INSERT INTO store_item_photo (id_item, position)
  SELECT
    3 AS id_item,
    MAX(position)   1
  FROM store_item_photo 
  WHERE id_item = 3;
  

Ответ №2:

Попробуйте этот запрос :

 $sql = 'INSERT INTO store_item_photo (id_item, position) VALUES (3, ((SELECT MAX(position) FROM store_item_photo WHERE id_item = 3)   1))';
$stmt = cnn()->query($sql);  

Комментарии:

1. Привет! Это тот же самый запрос, который я опубликовал, не работает.