2016-11-26 16 views
1

私は週内にリーダーボードから得点を表示しようとしています。LIKEとBETWEEN Haxeを使用したクエリSQL

現在、私は次のように特定の毎日のスコアを照会:

ので、「後のものを見つけるの2016年11月25日20時04分47秒でフォーマットされている私のタイムスタンプからのスコアが表示されます
public static function displayDay(day:String) 
{ 
    queryLeaderboard("SELECT * FROM gamedata WHERE ts LIKE '%-" + day + "%' ORDER by scoreDifference DESC LIMIT 10"); 
} 

- "その後何かで。毎年、毎月、毎日のスコアでうまく動作します。

しかし、私は毎週の得点を見つけようとしています。

私は現在、次があります。

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を使用してみてください:あなたは機能との間の使用している場合のMySQLでは

... 
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); 
... 

を、あなたは、データオブジェクトの少なくとも文字列表現を渡す必要があります。そうした場合、LIKEは必要なくなります。また、getDate()を見れば、intを返すので、monday(1)から7を引くと-6が得られます。代わりに私はタイムスタンプ表現に変換された現在の時間から7 * 24 * 3600秒を差し引くことを提案する。

私はこれが役立つことを願ってhaXeのドキュメントでAPI.HAXE.ORG/DATE

を見てみましょう。プラットフォームに依存

EDIT
getTime()は毎秒(milisecondない)精度を有しています。そのため、上記の答えは1000を掛けても乗算しなくても実装できます。

+0

'SELECT * FROM gamedata WHERE ts BETWEEN '2016-11-27 22:21:38' AND '2016-11-27 22:31:42' order by scoreDifference DESC LIMIT 10' - 日、わずか10分 – Sectah

+1

@Sectah申し訳ありませんが、私は答えを編集しました。 –

関連する問題