我有一个包含三个字段的表 - 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与我提供的值匹配。
答案 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