サポート » その他 » 同じタイムスタンプだとID順にならばない

  • おそらくレアケースだから仕方ないのだろうと思っていますが…。

    例えば大量のデータを一度に読み込ませたくて、WordPressが読める形(MT形式を使いました)でデータを作成(エディタの一括置換とか使って)。そのデータを一気に読み込む…なんてことやりますよね。この時、データがバッティングしないように日付フィールドを抜いて作る訳ですが、そうやって読み込んだデータ(エントリ)が正しく並ばない、という現象が出ています。

    エントリは作られた順(リビジョンとかあるので必ずしも連番ではない)にIDが振られる訳で、新しいものほどより大きなIDが振られると理解しています。1→2→5→11→14みたいな感じで。

    先に書いたようなデータをインポートした場合、日付が入っていない為にファイルの上から順番に登録されていくんですが、その際、1秒以内のものは同じ日付として認識されます(DB上はそうなってる)。だから2011年02月25日11:00:00にインポートを開始したとすると、11:00:00とタイムスタンプが付いてしまうものが数件(サーバーレスポンスや回線による)出るということになります。

    この場合、同じ日付のものは登録順に並んでもらうのが美しいのですが、実際には「どれが先にくるかわからない」という現象が出ています。WordPressの関数だけ使って表示しているぶんには気がつきませんが、SQLとかでデータの読み出しを平行して行う場合、得られた結果がWPのqueryと違うというチグハグな結果となります。WPコアのソースを追ってWPのqueryと同じ構文で読み出す…というのも手なんですが、ちょっと複雑なことをしようと思うとそうもいかず、データがズレちゃって…(悩)。

    とまぁ、半分愚痴でした。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • SQLで直接データを読み出すときに、order byでIDと日付指定して整列させればいいだけの話のような気がするのは私だけですかね?

    それとも、データをインポートした時に先頭から順にIDが振られないって話ですか?

    まぁ、わたしは少なくともwordpressではSQL直接叩くことはないので、きっとレアケースなんでしょうね。

    トピック投稿者 V.J.Catkick

    (@vjcatkick-1)

    逆逆、order byでIDと日付指定して引っ張りだした値は正しく並んでるんですけれど、wpでひっぱってくるとちゃんと登録順に並ばないんです。
    つまり同じ日付のエントリが3つ(ID10, 11, 12)あるとすると:

    SQL:10 11 12
    WP:11 12 10(不規則)
    という結果になるんです。

    まぁ後で並び替えることで解決はしたんですが、遅くて…。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「同じタイムスタンプだとID順にならばない」には新たに返信することはできません。