我幾乎是一個noob,試圖通過搜索來解決這個問題,但我沒有成功。根據以前的查詢結果難以查詢mysql - 可能嗎?
我有一個MySQL表是這樣的:
保羅 - > 2011-04-01 - > 100
史蒂芬 - > 2011-03-01 - > 100
鮑勃 - > 2011-04-01 - > 150
保羅 - > 2011-04-02 - > 150
史蒂芬 - > 2011-03-02 - > 200
鮑勃 - > 2011-04-01 - > 150
保羅 - > 2011 -04-03 - > 200
Steven - > 2011-03-03 - > 300
所以基本上我有一些名稱與日期和分數。日期之間可能存在差距,這意味着保羅可能對昨天有價值,但史蒂文可能不會。 我想執行一個查詢,在這個查詢中,我可以找到在最後一次輸入後的一定天數內沒有獲得任何積分的所有人的姓名。
我開始的東西是這樣的:
$ query =(「SELECT name,MAX(id)FROM ranking GROUP BY name」):
這將確保我有每個人的最後實際分數值,但在此查詢我需要執行一個查詢,該查詢現在可以查找其最近的條目等於或大於最新得分值的X分數值或超過X天的分數值的人員。
我希望這是可以理解的。
之前我通過查詢整個表格並在PHP中進行比較來完成所有這些工作。但是這個表現在有將近10,000個條目,這些條目創建的數組超出了內存限制。
是否有可能做出這樣的特定查詢或者是否有人知道該問題的另一個解決方案? 在此先感謝您的幫助。
@mdma 嗨再次,
你的假設是正確的。每行保存某個日期的名稱分數。分數可以增加,減少或保持不變。由於我只給500人得分最高,有人可能有4月1日的價值,但如果他退出前500名,他的價值可能不會在4月2日。但他可能會在4月10日再次獲得獎金,前500個最高分。
我試圖實現查詢方式如下:(我換成分的成績,因爲這是該領域是如何被調用)
$query = "SELECT ranking.name, MAX(ranking.id) rankingId, MAX(ranking.points) rankingPoints, MAX(ranking.date) rankingDate, outrank.name, MAX(outranking.id) outrankId, MAX(outrank.points) outrankPoints, MAX(outrank.date) outrankDate " .
"FROM ranking " .
"LEFT JOIN " .
"(SELECT name, id, points, date FROM ranking GROUP BY name) AS outrank " .
"ON " .
"(ranking.name!=outrank.name " .
"AND outrank.date<=DATE_SUB(ranking.date, INTERVAL 3 DAY) " .
"AND outrank.points>=ranking.points) " .
"GROUP BY ranking.name, outrank.name";
$result = mysql_query($query) or die("You wish, sweetheart!");
但它不工作,到目前爲止,模具函數被調用。我花了幾個小時試圖詳細瞭解查詢,但我沒有。^^ 我理解加入兩個表的概念,但我不明白MAX(ranking.points)rankingPoints的作用。 對不起,如果這有點愚蠢,但我真的寫了我的第一個回聲「你好」; 4周前。
再次感謝您!
嗨,再一次
我有點做了我自己的工作。我會詢問每個人的最新統計數據與
$query = "SELECT rank.id, rank.name, rank.points, rank.niveau, rank.date
FROM (SELECT name, MAX(date) AS maxdate FROM ranking GROUP BY name) AS x
INNER JOIN ranking AS rank ON rank.name = x.name AND rank.date = x.maxdate
WHERE niveau != '---' ORDER BY name";
後來我做這讓我所有的結果與日期前X天的第二查詢。
$query = sprintf("SELECT rank.name, rank.date, rank.points, rank.id
FROM (SELECT name, MAX(date) AS maxdate FROM ranking GROUP BY name) AS x
INNER JOIN ranking AS rank ON rank.name = x.name AND rank.date <= date_sub(x.maxdate, INTERVAL '%s' DAY)
WHERE niveau != '---' ORDER BY name, date DESC")
但第二個查詢會給我所有行的該日期之前的人。有沒有辦法將其限制爲每個排名。名稱只有一行?
謝謝!
我想這是一個MySQL函數。我不知道我該如何使用它,以及我如何使用它。 – 2011-04-19 16:26:45