2012-03-05 21 views
0

最新のログインでmysqlをソートしたいのですが、ログインするたびに最新のログインをソートして保存する必要があります。mysqlをソートする方法

+1

なぜ物理的にテーブルを使用する必要がありますか? 'SELECT blah FROM table ORDER BY name'で十分でしょうか? – Ryan

+0

@Melissa最新のログイン情報をソートしたいので... – Lukus

+0

私はあなたに何が問題なのかを理解する必要があります。あなたはそれらを選別することができますか? ... –

答えて

0

MySQLに格納されている値をアルファベット順に確実に保持することはできません。あなたができる最良の方法は、SELECTクエリにORDER BY句を使用することです。

0

通常、「ORDER BY」句を追加して選択するとソートされます。なぜ彼らは実際にテーブルに格納されている順序を気にしていますか?

本当に気になるのであれば、INSERT ... SELECTを実行して列をソートしている間に新しい表にコピーすることはできますが、新しいレコードを追加するたびにリストの最後に終わります。

0

SQLはそのようには機能しません。それは、行が「そのまま」読み取られることを意図したスプレッドシートのようなものではなく、特定の意味のある順序でそれらを配置することができます。あなたが今までにSQLが行を格納する順序を変更するものはありません.SQLはクエリを通じてデータを提供し、クエリはどの行をどの順序で表示するかを指示します。

したがって、特定の順序でデータを表示するたびに「注文」句を再利用する必要があります。ただし、手動でSQLに多くのクエリを行う必要はありません。あなたがそれを扱うためのスクリプトやアプリケーションを作成しているのであれば、データを必要とするたびに一度だけクエリを書いて再実行します。

0

ユーザーテーブルから最後のログインを取得するには、あなたはuser_nameは、あなたが探している分野であるとlogin_datetimeは、あなたが注文することができ、タイムスタンプであると仮定すると

SELECT user_name, login_datetime 
FROM user_table 
ORDER BY login_datetime DESC 
LIMIT 1 

のようなクエリを使用することができます。 LIMIT 1は一番上の結果のみを表示し、必要に応じて変更することができます。

0

MySQLのInnoDBエンジンでは、行は主キーに従って物理的に順序付けられます。したがって、主キーがlogin列にある場合、行はloginの値で物理的な順序にとどまります。

主キーの要件は、各値が一意でなければならず、NULLが許可されていないことです。したがって、login列を主キーにすることを検討することもできます。 loginがdatetime列の場合、最新のログイン日時の値は常に表の最後になります。

多くの人が、自動インクリメント整数列を主キーにしています。この場合、挿入される最後のレコードは常にテーブルの最後になります。

特定の状況で行を物理的な順序で(特定の列ごとに)持たなければならないことを知っていなければなりません。例えば

、以下SELECTを行うことによって結果を注文する列を指定することなく、物理的な順序(プライマリキーと同じ)の行を返し、その後、結果セットを注文するMySQLを強制せず:

SELECT * 
FROM test 

ただし、主キー以外の結果を注文する必要がある場合は、ORDER BY句を使用する必要があります。行が物理的に列nameによって注文していますが、結果はlogin順に返されたいた場合たとえば、あなたは次のクエリを発行します。

SELECT * 
FROM test 
ORDER BY login ASC 

上記のクエリは、に応じて行を注文するのMySQL頼みます指定された列をORDER BY句に指定して値を昇順に並べ替え、DESCを降順に並べ替えます。

関連する問題