簡體   English   中英

MySQL:使用同一表中列的MAX值插入新記錄

[英]MySQL: Insert new record using MAX value of a column in the same table

我需要在新插入的行中使用位置列的MAX值加1來INSERT一條新記錄。 因此,如果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/#!9/228058/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;

試試這個查詢:

 $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); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM