2016-05-16 21 views
0

に戻って異なる結果をもたらしますこんにちは、私は次のクエリがあります:PDOの一環としてPHP PDO - MySQLのクエリは、2台のサーバー

select t.* 
from (SELECT * 
     FROM Matches 
     where HID=:ID or AID=:ID 
     order by Date desc 
     limit 10 
) t 
order by t.Date, t.Time asc 

を私はWindows上でXAMPPを使用してUbuntuの上の1と1を実行している2つのウェブサイトを持っている文を準備7データは同じですが、ubuntuボックスでは、日付と時間順に最後の10試合が再生されます。 Windowsのボックスでは、10のゲーム(最初のリスト)は、実際には前のゲームです(2つのゲームは同じ夜の午後6時15分に、もう1つは午後7時に再生されました)。後者は表示する必要があります窓ボックス。それはちょっと変わったようです。他の誰かがこれを見たことがあるかどうかを知りたかっただけですか?

+0

両方のサーバーで 'SELECT NOW();'クエリを実行すると、タイムゾーンの違いがあるようです。あなたのソースデータサンプルを提供する – Alex

答えて

0

異なるMySQLインストールを使用していますか?私はこれを扱う別のインストールが異なっていると想像することができます。

また、あなたのWindowsボックスに午後7時のゲームの記録がありますか?おそらくあなたのDBにレコードをプッシュすると何かがうまくいかなかったでしょう。

1

データには、1つの日付で2つのゲームが含まれていますが、時間は異なります。ゲームを時間順に並べ替えていない場合は、行の順番は決定されませんORDER BY行がないと、どこにでも行が表示されます。ほとんどの場合、最初にテーブル行に挿入された行が最初に出力されます。しかしこれは文書化されていない動作であり、使用しないでください。あなたのケースでは、時間による暗黙の並べ替えは適用されません。今日は最初の行で午後7時、明日は午後6時15分になります。

異なるマシンで同じ結果を受け取るには、関連性のない動作で正しいソートを行う必要があります。サブクエリで時間による並べ替えを追加するだけで、同じデータを持つ任意のMySQLインスタンスで常に同じ結果が得られます。

SELECT t.* FROM (
    SELECT * 
    FROM Matches 
    WHERE HID = :ID OR AID = :ID 
    ORDER BY `Date` DESC, `Time` DESC 
    LIMIT 10 
) t 
ORDER BY t.Date, t.Time 

これは、本物の10の最後のゲームを返します。

関連する問題