0

MySQLテーブルに多数のレコードがあり、それぞれに日付属性(mdY)があり、時間属性がhr:min:secとして格納されています。日付と時刻の両方に基づいて時系列で並べ替えたいと思います。PHP / MySQLでそれをどのように行うのですか?

編集:私の日付と時刻をデータベースに保存するより効率的な方法があると思われる場合は、私に知らせてください。

4

7 に答える 7

3

私の日付と時刻をデータベースに保存するためのより効率的な方法があると思われる場合は、お知らせください。

はい、テーブルのフィールドを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`
于 2012-08-14T03:58:07.333 に答える
3

日付と時刻に基づいてそれらを並べ替えたい場合は、おそらく 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
  }
?>
于 2012-08-14T04:03:00.733 に答える
2

MySQL にはDateTimeデータ型があるため、2 つの属性をマージできます。属性が必要なので、2 つの属性を連結して実際のDateTime値にキャストすることで、レコードを並べ替えることができます。

SELECT *
FROM tablename
ORDER BY STR_TO_DATE(CONCAT(`date`, ' ', `time`), '%m/%d/%Y') ASC
于 2012-08-14T03:59:25.247 に答える
1

データをタイムスタンプまたは日時として保存し、PHP で date() 関数を使用してフォーマットする方が効率的です。

$var1 = date("m.d.Y", timestamp);
$var1 = date("h:i:s", timestamp);
于 2012-08-14T03:58:22.867 に答える
1

さて、MySQL テーブルに新しい列を作成します。名前が何であれ、DateTime 型または Timestamp 型で、デフォルトを CURRENT TIMESTAMP などに設定できますが、それが何と呼ばれているか正確には思い出せません。しかし、PHPMyAdmin で行うのは簡単です。そうすれば、それだけで注文できます。そして、列は自動的に入力されます。または、必要に応じて手動で入力することもできます。次に、 ORDER BY( ColumnName);を実行します。

于 2012-08-14T03:59:13.057 に答える
1

Mysqlテーブルフィールドのデータ型を「DATETIME」に指定して、phpからのようにデータを保存できませdate("Y-m-d H:i:s")んか?

また、レコードを選択して、この日付フィールドで降順または昇順で並べ替えることができます。

于 2012-08-14T03:59:19.360 に答える
1

可能な限りデータベースを活用してみてください。

SELECT の最後に ORDER BY date_field、time_field を使用します。

列が実際に文字列である場合は、新しいテーブルを作成し、列の型をそれぞれ日付と時刻に変更することを検討してください。STR_TO_DATE 関数は、文字列を日付に変換できます。必要に応じて、それらを単一の日時列に結合します。それを行いたい場合は、CONCAT またはその他の文字列関数が必要になる場合があります。

于 2012-08-14T04:00:17.687 に答える