使用特定值检索数据库表中的最新条目

时间:2011-05-03 23:27:27

标签: php mysql

我有一个包含三个字段的表 - userID,couponID,last_couponID。

当用户访问优惠券时,我运行此查询:

  mysql_query("INSERT INTO users_coupons (userID, couponID) VALUES ('$recordUserID', '$recordCoupID')");

此外,我有另一个查询应该通过轮询数据库表并查找当前用户ID的最新结果,将最后一个couponID插入到字段last_couponID中。

我相信它是这样的:

 SELECT couponID FROM users_coupons ORDER BY userID LIMIT 1

我说错了吗?或者我应该使用不同的查询?

像这样:

userID   couponID
  1         3
  1        13
  1        23
  2         5
  2         3

因此,如果我想要userID 2的最新优惠券,它将是'3',而对于userID 1,它将是'23'。我只想要数据库表中的最后一个条目,其中userID与我提供的值匹配。

4 个答案:

答案 0 :(得分:2)

我只想在users_coupons表中添加一个主键(自动增量)。

如果您需要用户的最新优惠券,请SELECT couponID FROM users_coupons WHERE userID = ? ORDER BY id DESC LIMIT 1

答案 1 :(得分:1)

假设couponID是数字,并且某个userId的最后一个couponID是最大的(作为数字),你可以这样做:

SELECT MAX(couponID) AS lastCouponId FROM users_coupons WHERE userId = <put here the user id>

编辑:既然你已经编辑了你的问题,我就会编辑我的答案。

您必须添加自动增量主键,否则您无法确切知道哪个条目是最后一个。当我回答时,我认为某个userId的最后一张优惠券是couponId最大的优惠券。你确定你不能只是按照这种方式工作吗?

答案 2 :(得分:0)

有些事情......

SELECT couponID
FROM users_coupons
WHERE userID = <current user id>
ORDER BY <primary key of user_coupons table if it's an identity column> DESC
LIMIT 1

......更合适。您的查询不会对“当前”用户ID执行任何操作。

如果你实际上是在最高的couponID之后,那么Giacomo建议的SELECT MAX(couponID)...是一个好主意 - 加上检查与当前用户ID匹配的UserID。

答案 3 :(得分:0)

如果您将CouponID可靠地作为标识符递增,则@ Giacomo的答案有效。如果您已合并数据或以任何其他方式调整此值,则可能不正确。

理论上,如果您将CouponID视为代理键,则无法使用它来明确确定插入顺序。如果您打算将其用于插入订单,那么您还需要确保支持代码和数据库维护计划促进此用途。

我认为“正确”方法也是存储DateTime