のようなクエリが実行
されるたび"select * from table where userid=xx"
に、mysqlはこれらの値をテーブルの最初の行から最後の行にフェッチします。
ただし、最近更新された値が結果の最初に表示されるように、最後から最初に選択したいと思います。
"select * from table where userid=xx order by time DESC"
テーブルに時間列がないのでできません。テーブル内の最近更新されたアイテムを最初に表示したいだけです。
自動インクリメントフィールドがある場合は、その説明で並べ替えることができます。
結果を保証するために、注文する列を提供する必要があります。したがって、テーブル構造を変更するか、何を注文するかを決定する必要があります。
ハックは、配列に提示された順序でデータをプルし、次にその配列の下部からポップを開始することです。
タイムスタンプ、自動インクリメントID、または並べ替えるその他の列が必要です。
句を使用しないときにデータベースから特定の順序で行を取得するからORDER BY
といって、それらがその順序で返されることが保証されているわけではありません。また、結果セットの順序を意味するものでもありません。に使用できる明確なフィールドが必要ORDER BY
です。そうしないと、やりたいことを実行できません。
信頼できる列がない場合に、そのためにできるいくつかのハック:
SELECT * FROM (SELECT *,(@x:=@x+1) default_ordering FROM `table_name`, (SELECT @x:=0) t2) any_name ORDER BY default_ordering DESC