[英]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.