繁体   English   中英

检索具有特定值的数据库表中的最新条目

[英]Retrieving the most recent entry in a database table with a certain value

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

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

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

此外,我还有另一个查询应该通过轮询数据库表并查找当前 userID 的最新结果,将最后一个 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 与我提供的值匹配的最后一个条目。

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

在想要用户的最新优惠券的时候,
SELECT couponID FROM users_coupons WHERE userID =? ORDER BY id DESC LIMIT 1

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

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

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

您必须添加一个自增主键,否则您无法确切知道哪个条目是最后一个。 当我回答时,我认为某个userId的最后一张优惠券是具有最大优惠券的优惠couponId 你确定你不能让事情这样运作吗?

类似于...的东西

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 之后,那么SELECT MAX(couponID)...正如 Giacomo 所建议的那样是一个好主意 - 再加上检查与当前用户 ID 匹配的 UserID。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM