2016-11-26 153 views
1

我試圖從一週內排行榜顯示得分。LIKE和BETWEEN查詢SQL與HAXE

目前我查詢某些日常的得分與以下:

public static function displayDay(day:String) 
{ 
    queryLeaderboard("SELECT * FROM gamedata WHERE ts LIKE '%-" + day + "%' ORDER by scoreDifference DESC LIMIT 10"); 
} 

這將顯示從我戳分數被格式化爲2016年11月25日20時04分47秒,因此找到東西后「 - 「隨後有任何事情。我有這個很好的工作,每年,每月和每日的分數。

不過,我試圖找到的每週得分。

目前,我有以下幾點:

public static function displayWeek() 
{ 
    var dateNow:Date = Date.now(); 

    Lib.print(dateNow); 
    Lib.print("<br>"); 

    Lib.print(dateNow.getDate()); 
    Lib.print("<br>"); 

    var weekAgo:Int = dateNow.getDate() - 7; 
    Lib.print(weekAgo); 
    Lib.print("<br>"); 

    var query:String = "SELECT * FROM gamedata WHERE ts BETWEEN LIKE '%-" + weekAgo + "%' AND LIKE '%-" + dateNow.getDate() + "%' ORDER by scoreDifference DESC LIMIT 10"; 
    Lib.print(query); 
    queryLeaderboard(query); 
} 

查詢如下:

SELECT * FROM gamedata WHERE ts BETWEEN LIKE '%-19%' AND LIKE '%-26%' ORDER by scoreDifference DESC LIMIT 10 

,從我瞭解的SQL查詢(有限的),它不喜歡試圖找到彼此之間的值是字符串?但我相信這個格式是Haxe的SDateTime。

我該如何去做這件事?

class GameData extends Object 
{ 
    public var id:SId; 
    public var username:SString<32>; 
    public var countryA2:SString<32>; 
    public var scoreFor:SInt; 
    public var scoreAgainst:SInt; 
    public var scoreDifference:SInt; 
    public var ts:SDateTime; 
} 
+0

乘以請編輯您的問題,包括'gamedata'表的元數據(列名和數據類型)來實現。謝謝。 –

+0

這是更好還是SQL中的實際表結構? – Sectah

+0

請在數據庫中定義實際的表結構。謝謝。 –

回答

2

嘗試使用這樣的SQL:

... 
var query:String = "SELECT * FROM gamedata WHERE ts 
BETWEEN '" + Date.fromTime(dateNow.getTime()-7*24*3600*1000).toString() + "' 
AND '" + dateNow.toString() + "' 
ORDER by scoreDifference DESC LIMIT 10"; 
Lib.print(query); 
queryLeaderboard(query); 
... 

在MySQL中,如果你要用的功能,您必須通過數據對象的至少字符串表示。如果你這樣做,LIKE不再需要。另外,如果你看看getDate() - 它返回Int,所以如果你從星期一(1)減去7,你得到-6。相反,我建議從當前時間減去7 * 24 * 3600秒轉換爲時間戳表示。

看看HAXE文檔API.HAXE.ORG/DATE

我希望這可以幫助。取決於平臺

EDIT
的getTime()具有每秒(未milisecond)精度。這就是爲什麼上面的答案可能有或沒有通過1000

+0

'SELECT * FROM GAMEDATA WHERE BETWEEN '2016年11月27日22時21分38秒' 與 '2016年11月27日22時31分四十二秒' ORDER BY scoreDifference DESC LIMIT TS 10' - 它不會改變一天,只有10分鐘 – Sectah

+1

@ Sectah對不起,我編輯了答案。 –