MySQLテーブルに多数のレコードがあり、それぞれに日付属性(mdY)があり、時間属性がhr:min:secとして格納されています。日付と時刻の両方に基づいて時系列で並べ替えたいと思います。PHP / MySQLでそれをどのように行うのですか?
編集:私の日付と時刻をデータベースに保存するより効率的な方法があると思われる場合は、私に知らせてください。
私の日付と時刻をデータベースに保存するためのより効率的な方法があると思われる場合は、お知らせください。
はい、テーブルのフィールドをdatetime
作成timestamp
し、このフィールドでインデックスを作成し、それで並べ替えます。
クエリ:
/* add a column */
alter table `table` add column `created_at` datetime not null default "0000-00-00 00:00:00"
/* create an index */
alter table `table` add index `created_at` (`created_at`)
/* sort */
select * from `table` order by `created_at`
日付と時刻に基づいてそれらを並べ替えたい場合は、おそらく TIMESTAMP の使用を検討する必要があります。そのフィールドを記録保持に使用している場合、デフォルト値を CURRENT_TIMESTAMP に設定すると、MySQL がこの情報を自動的に挿入します。
次に、次のような単純なクエリですべてのレコードを取得し、TIMESTAMP フィールドで並べ替えます。
SELECT * FROM table WHERE something = 'matches' ORDER BY thetimestampfield DESC
サンプル PHP コード:
<?php
// $c is a reference to mysql_connect() somewhere else in your code
$q = "SELECT * FROM table WHERE something = 'matches' ORDER BY thetimestampfield DESC";
$r = mysql_query($q, $c);
while($row = mysql_fetch_assoc($r)) {
// do your thing
}
?>
MySQL にはDateTime
データ型があるため、2 つの属性をマージできます。属性が必要なので、2 つの属性を連結して実際のDateTime
値にキャストすることで、レコードを並べ替えることができます。
SELECT *
FROM tablename
ORDER BY STR_TO_DATE(CONCAT(`date`, ' ', `time`), '%m/%d/%Y') ASC
データをタイムスタンプまたは日時として保存し、PHP で date() 関数を使用してフォーマットする方が効率的です。
$var1 = date("m.d.Y", timestamp);
$var1 = date("h:i:s", timestamp);
さて、MySQL テーブルに新しい列を作成します。名前が何であれ、DateTime 型または Timestamp 型で、デフォルトを CURRENT TIMESTAMP などに設定できますが、それが何と呼ばれているか正確には思い出せません。しかし、PHPMyAdmin で行うのは簡単です。そうすれば、それだけで注文できます。そして、列は自動的に入力されます。または、必要に応じて手動で入力することもできます。次に、 ORDER BY( ColumnName
);を実行します。
Mysqlテーブルフィールドのデータ型を「DATETIME」に指定して、phpからのようにデータを保存できませdate("Y-m-d H:i:s")
んか?
また、レコードを選択して、この日付フィールドで降順または昇順で並べ替えることができます。
可能な限りデータベースを活用してみてください。
SELECT の最後に ORDER BY date_field、time_field を使用します。
列が実際に文字列である場合は、新しいテーブルを作成し、列の型をそれぞれ日付と時刻に変更することを検討してください。STR_TO_DATE 関数は、文字列を日付に変換できます。必要に応じて、それらを単一の日時列に結合します。それを行いたい場合は、CONCAT またはその他の文字列関数が必要になる場合があります。