我正在撰写一个论坛应用程序。我有一个创建板的脚本。除了autoincremented board_id列之外,所有板都有一个名为position的整数列,用于在主页上对板进行排序。创建新板时,我希望默认位置是具有给定category_id的板表行中的最大值。位置可以有重复,因为它们位于其类别中。我希望这是有道理的。
所以,如果我有以下董事会......
b_id | c_id | pos |
-------------------
1 | 1 | 1 |
-------------------
2 | 1 | 2 |
-------------------
3 | 2 | 1 |
-------------------
我在c_id 2中创建一个新板,位置应为2.如果新板位于c_id 1,则位置为3.我该怎么做?
下面的查询是我目前使用的,但位置总是最终为0。
INSERT INTO `forum_boards` (
`title`,
`description`,
`category_id`,
`position`
) VALUES (
'Suggestion Box',
'Have an idea that will help us run things better? Let us know!',
'1',
'(SELECT MAX(position), category_id FROM forum_boards WHERE category_id = 1)+1'
)
答案 0 :(得分:3)
您可以采用您正在使用的方法。你需要删除单引号:
INSERT INTO `forum_boards` (`title`, `description`, `category_id`, `position`
)
VALUES ('Suggestion Box',
'Have an idea that will help us run things better? Let us know!',
1,
(SELECT MAX(position) + 1 FROM forum_boards WHERE category_id = 1)'
);
但是,这并未考虑最初为空的类别。而且,我会使用insert . . . select
:
INSERT INTO `forum_boards` (`title`, `description`, `category_id`, `position`
)
SELECT 'Suggestion Box',
'Have an idea that will help us run things better? Let us know!',
1,
COALESCE(MAX(position) + 1, 1)
FROM forum_boards
WHERE category_id = 1;
请注意,我在'1'
附近删除了单引号。数字应该以数字形式传递,而不是字符串。