我有兩個表,創建這樣(只相關的顯示信息)排序按行排在其他表填充一個「熱門」名單
CREATE TABLE levels
(
id INT(6) UNSIGNED AUTO_INCREMENT,
gameid INT(6),
created DATETIME,
PRIMARY KEY(id,gameid)
)
CREATE TABLE votes
(
levelid INT(6) NOT NULL REFERENCES levels(id),
vote TINYINT(1),
date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY(levelid)
)
用戶獲得的水平(+1或投票 - 1),從而創建一個回到某個級別的投票記錄。
我想用數據來做到這一點,非語法:
SELECT * FROM levels ORDER BY
(select sum(vote) from votes where votes.levelid=levels.id and date is within the last week)
我怎麼可能把它轉換成一個合法的MySQL查詢?我所嘗試的一切都給了我一個非常神祕的錯誤信息(「出錯了!查看手冊!」),我只是mySQL的高級初學者。
我們的目標是返回我的所有關卡,並按照上週有最佳選票的人進行排序......這樣,新關卡將會變得越來越流行,而更老的關卡將會脫落。
在此先感謝!
編輯:
所以這裏的預期結果的例子: 這裏是我的數據(在英文中爲清楚起見):
級別:
LEVEL1(ID = 1)
LEVEL2(ID = 2)
票:
+1 LEVEL1兩天前
+1 LEVEL1十天前
+1 LEVEL120天前
+1 LEVEL2一天前
+1 LEVEL2三天前
-1 LEVEL230天前
所以我可以做這樣的查詢:
SELECT * FROM LEVELS ORDER BY (select sum(vote) from votes where levelid=levels.id)
而且這會使我獲得LEVEL1的+3和LEVEL2的+1。
但是,在過去的七天裏,我應該看到LEVEL1爲+1,LEVEL2爲+2,因此首先返回LEVEL2。
而且,我得到的總體思路是 「爲了通過(選擇...」 將是相當緩慢
還有一個編輯:
此查詢的工作:
SELECT * FROM levels ORDER BY (SELECT SUM(vote) FROM votes WHERE levelid=levels.id AND votes.date>=(CURDATE() - INTERVAL 7 DAY)) DESC
。 ..但這是做這種事情的最好方法嗎?
我會建議添加一些示例數據(足以說明意圖)和預期結果。 (使用[edit]。) –
好的,我將編輯該問題。我試圖把數據放在這裏,但格式化使其不可讀。 – Raptisoft
與您的問題無關,但我認爲您需要在此處爲投票創建不同的主鍵;因爲每個級別只能有1票。 –