簡體   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