![](/img/trans.png)
[英]how to insert new value in column with same id with old value in mysql
[英]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.