我有一個包含用戶數據(例如名稱,地址等)的表以及另一個包含關於用戶的文本段的表。他們分開的原因是因爲我們需要記錄所有舊的數據。所以如果用戶改變他們的段落 - 舊的仍然應該被存儲。關於數據的每一位都有一個關於MeID的主鍵。我想要做的是有一個連接,從其他表中取出他們的名字,地址等和最新的aboutMe數據。MySQL獲得最接近NOW()的行
我不確定我如何才能命令連接才能獲取有關我的最新數據。
有人可以幫忙嗎?
我有一個包含用戶數據(例如名稱,地址等)的表以及另一個包含關於用戶的文本段的表。他們分開的原因是因爲我們需要記錄所有舊的數據。所以如果用戶改變他們的段落 - 舊的仍然應該被存儲。關於數據的每一位都有一個關於MeID的主鍵。我想要做的是有一個連接,從其他表中取出他們的名字,地址等和最新的aboutMe數據。MySQL獲得最接近NOW()的行
我不確定我如何才能命令連接才能獲取有關我的最新數據。
有人可以幫忙嗎?
如果你有兩個表加入,子查詢要求與老款的表給剛剛過去的一個,按日期排序(datestamp DESC),並根據您的用戶標識進行匹配。最後,外部查詢將整個事件限制在有問題的用戶(@UserID)中。
SELECT name, address, aboutme
FROM users
LEFT JOIN
(SELECT aboutme FROM oldertable
WHERE aboutMeID = users.id
ORDER BY datestamp DESC
LIMIT 1)
WHERE users.id = @UserID;
假設你已經與dateEntered場一列,你可以只說
select col1, col2, col3 from aboutme order by dateEntered desc limit 1
這會給你這是最新的行。
這是正確的,它已被修改 – Avitus 2010-05-10 17:54:11
你應該改變descendently的日期進行排序,並將其限制在一個記錄(LIMIT 1)
子查詢的變體:
select name,
address,
(select aboutme
from ABOUTTABLE
where USERDATA.userid = ABBOUTTABLE.userid order by datefield limit 1)
from USERDATA
這是相當棘手的,很可能是緩慢的,但它是通過依賴子查詢完成。
SELECT name, address, aboutme.text as aboutme
FROM users
LEFT JOIN aboutme ON aboutMeID = (SELECT aboutMeID FROM aboutme
WHERE user_id = users.id
ORDER BY datestamp DESC
LIMIT 1)
不知道它是否比@JYelton解決方案更快,這是你必須測試自己。
我試過這樣的查詢,但得到錯誤消息user.id在子查詢中是未知的。任何人都知道該怎麼做? – Steve06 2011-10-18 12:39:02
將您的參數@UserID替換爲users.id。內部查詢實際上並不加入用戶表。我需要編輯這個答案纔是準確的。 – JYelton 2011-10-18 15:57:07
對於只存儲特定用戶信息的存儲例程而言,這是有意義的。出於我的目的,我需要在子查詢中處理的用戶依賴外部查詢中的當前用戶(例如,如果我處理多個用戶的記錄) – Steve06 2011-10-18 16:57:51