代码之家  ›  专栏  ›  技术社区  ›  alex

在MySQL中有没有一种更简单的方法可以做到这一点?

  •  1
  • alex  · 技术社区  · 15 年前

    我需要由用户获取最后插入的产品。这就是我想到的

       $query = 'SELECT id
                     FROM products
                     WHERE user_id = ?
                    ORDER BY id DESC
                           LIMIT 1';
    

    应该 工作,因为ID是自动递增的。但对我来说,这感觉很糟糕。有更好的方法吗?

    我不能用 mysql_last_insert_id() 或者其他类似的东西,因为我需要特定用户的最后一个产品。

    4 回复  |  直到 15 年前
        1
  •  4
  •   OMG Ponies    15 年前

    用途:

      SELECT MAX(t.id) AS id
        FROM PRODUCTS t
       WHERE t.user_id = ?
    

    MAX 是聚合函数,返回指定列的最大值。因为查询只返回一列(聚合函数正在使用的列),所以 GROUP BY 不需要指定子句。但使用时没有任何危害:

      SELECT MAX(t.id) AS id
        FROM PRODUCTS t
       WHERE t.user_id = ?
    GROUP BY t.user_id
    
        2
  •  5
  •   Andy West    15 年前

    为此,我将在表中添加一个日期时间列。从排序的角度来看,我个人不喜欢依赖自动增量的行为。此外,它的目的是“为新行生成一个唯一的标识”。除此之外,您不应该真正关心它的价值。

        3
  •  1
  •   Carlos Lima    15 年前

    你可以使用

    SELECT MAX(id) FROM ...
    

    不知道会有多好,透:)

        4
  •  0
  •   Radhi    15 年前

    我同意datetime列选项。 例如,您有一个名为lastaddeddate datetime的列 然后您可以使查询

    从中选择top(1)products.id user_id=@user id order的产品 按lastaddeddate,id desc

    或者在ID的情况下,您也可以编写查询

    从中选择top(1)products.id user_id=@user id order的产品 Id Desc

    推荐文章