3

これがMySQLのバグなのか、私のせいなのかはわかりませんが、本当に神経質になり始めています。

ユーザーの回答を取得するために、次のクエリを使用します(これにより、質問が削除または非表示にされていないことも確認されます)。

  SELECT *
    FROM answers a
    JOIN questions q
      ON a.questionid = q.qid
   WHERE a.userid = <uid> -- query parameter
     AND a.deleted = 0
     AND q.hidden = 0
     AND q.deleted = 0
ORDER BY a.created DESC

問題は、3つを除いて、すべての回答が作成された時刻のタイムスタンプ順になっていることです。私のプロフィールの回答のこのスクリーンショットで、「この質問には順序に問題があります...」という質問の回答の日付を見てください。

ここに画像の説明を入力してください

何が起こっているのか本当にわかりません。ご覧のとおり、MySQLクエリには。がありORDER BY a.created DESCます。


私は何を試しましたか?

ええと、私はDBに保存されているUnixタイムスタンプをエコーアウトするなど、多くのことを試しましたが、それらはすべて正しいものです。

私が試したもう1つのことはstrtotime()、タイムスタンプを呼び出すことですが、それだけで問題が増えました。最初の1つは奇妙なことに巨大な負の数に変換され、1717年8月3日に表示されましたが、他は空白にされたため、1969年12月31日と言われました。


編集

他のいくつかの行も混同されているようです。


解決

questionsテーブルとテーブルのanswers両方にcreated列があることを発見しました。私はこれを行うことで修正しましたがSELECT *, a.created as ans_created, q.created as q_created、現在は機能しています。助けてくれた皆さん、ありがとうございました。

4

2 に答える 2

2

問題が何であるかを理解したので、私は自分の質問に答えるつもりです。

質問表と回答表の両方にcreated列があることがわかりました。

問題はa.created、クエリで注文していたことですが、PHP で日付を表示したため、$row['created']正しく注文されていましたが、誤った日付/時刻が表示されていました。

私はこれを修正しました...

SELECT *, a.created as ans_created, q.created as q_created 

そして、私のPHPで私はただやります$row['ans_created'].

コメントやその他の回答を手伝ってくれたすべての人に感謝します。:)

于 2012-08-16T02:17:06.533 に答える
1

CAST次のように列を試してくださいa.created

ORDER BY CAST(a.created AS DATETIME) DESC;

INTフィールドを使用している場合は、次を試してください:

ORDER BY CAST(a.created AS UNSIGNED INTEGER) DESC;
于 2012-08-03T07:06:42.413 に答える