0
那麼,我研究並嘗試了多種方式(主要在這裏找到stackoverflow)後,我仍然沒有得到它的工作。只選擇連接表中的最大值與一些where子句
我有一個MySQL表像這樣(縮短,時間將是當然的時間戳):
id docid wardid version approved endingtime
1 1 1 1 1 5 days
2 1 1 2 1 20 days
3 1 1 3 0 40 days
4 2 2 1 0 30 days
5 2 2 2 1 50 days
和其他兩個表像name
一些價值爲docid
和wardid
現在,它想要的是選擇所有行(只有一個docid條目),這些行沒有被批准,或者在特定的結束時間內,但只有最高版本的行。所以在這個例子中,我想只得到id爲3的行 這聽起來很簡單,因爲我寫這個,但我完全失去了。還不夠,我的白癡擦除了所有的嘗試(但最後):
SELECT MAX(dv.version), dv.docid, dv.id, dv.approved, dv.endingtime, d.name, w.name
FROM (doc_versions as dv
LEFT JOIN docs as d ON d.id = dv.docid
LEFT JOIN wards as w ON w.id = d.wardid
WHERE (approved < 1 AND ...)
OR (dv.endingtime < $time AND ...)
GROUP BY dv.docid
希望你能幫助我。我認爲這是最糟糕的嘗試(這讓我昨天感到憤怒;))
編輯: 我最後一次嘗試似乎工作,必須嘗試一些。
SELECT v1.docs_id, v1.id as docversion, v1.approved, v1.approver, d.name as docname, w.name as wardname, d.wards_id as wardsid, v1.validity_endtime as deadline, v1.creator
FROM
(
doc_versions v1
LEFT JOIN docs as d ON d.id = v1.docs_id
LEFT JOIN wards as w ON w.id = d.wards_id
)
INNER JOIN
(
SELECT MAX(version) version, docs_id
FROM doc_versions
GROUP BY docs_id
) v2
ON v1.version = v2.version
AND v1.docs_id = v2.docs_id
WHERE (approved < 1 AND approver = ".$userid.($wardid > 0 ? ' AND wardsid = '.$wardid : '').")
OR (v1.validity_endtime < $time AND creator = ".$userid.($wardid > 0 ? ' AND wardsid = '.$wardid : '').")";
謝謝,這幾乎與我剛剛嘗試的相同,唯一的區別是我的WHERE子句不在內連接中。我會編輯我的帖子。謝謝你的幫助。必須檢查。 – lexith
我只是試過,看看區別在哪裏。你的會給我一些不想要的結果。其實我想知道爲什麼,但不能再投入更多時間(目前)。我會按照這個。 – lexith