如何在排序列中插入 max(ordering) + 1 的 table?
How to insert into table with max(ordering) + 1 in ordering column?
我在 Postgres 中有一个 chapters
table 和一个 ordering
列(整数)。如何在柴油机中 insert/create 将 ordering
设置为 MAX(ordering) + 1
的新行?我试过使用原始 sql 如下:
INSERT INTO chapters
(id, name, user_id, book_id, ordering, date_created, date_modified)
SELECT ?, ?, ?, ?, IFNULL(MAX(ordering), 0) + 1, ?, ?
FROM chapters
WHERE book_id = ?;
并插入:
let id = Uuid::new_v4().to_string_id();
let now = Utc::now().naive_utc();
diesel::sql_query(INSERT_CHAPTER)
.bind::<Text, _>(&id)
.bind::<Text, _>(name)
.bind::<Text, _>(uid)
.bind::<Text, _>(bid)
.bind::<Timestamp, _>(&now)
.bind::<Timestamp, _>(&now)
.bind::<Text, _>(bid)
.execute(conn)?;
它适用于 Sqlite3 后端,但在 Pg 后端上失败并出现以下错误消息:
"syntax error at or near \",\""
使用 $N
作为 Postgres 的占位符和 ?
作为 sqlite3 的占位符。
我在 Postgres 中有一个 chapters
table 和一个 ordering
列(整数)。如何在柴油机中 insert/create 将 ordering
设置为 MAX(ordering) + 1
的新行?我试过使用原始 sql 如下:
INSERT INTO chapters
(id, name, user_id, book_id, ordering, date_created, date_modified)
SELECT ?, ?, ?, ?, IFNULL(MAX(ordering), 0) + 1, ?, ?
FROM chapters
WHERE book_id = ?;
并插入:
let id = Uuid::new_v4().to_string_id();
let now = Utc::now().naive_utc();
diesel::sql_query(INSERT_CHAPTER)
.bind::<Text, _>(&id)
.bind::<Text, _>(name)
.bind::<Text, _>(uid)
.bind::<Text, _>(bid)
.bind::<Timestamp, _>(&now)
.bind::<Timestamp, _>(&now)
.bind::<Text, _>(bid)
.execute(conn)?;
它适用于 Sqlite3 后端,但在 Pg 后端上失败并出现以下错误消息:
"syntax error at or near \",\""
使用 $N
作为 Postgres 的占位符和 ?
作为 sqlite3 的占位符。