如何在mysql中找到列的最大值?

时间:2017-09-13 02:23:21

标签: mysql

我正在撰写一个论坛应用程序。我有一个创建板的脚本。除了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'
)

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'附近删除了单引号。数字应该以数字形式传递,而不是字符串。