2016-11-26 65 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对不起,我编辑了答案。 –