'eventDate'と 'eventHour'の2つの 'datetime'フィールドを持つテーブルがあります。 'eventDate'、次に 'eventHour'で注文しようとしています。
日付ごとにイベントのリストがあります。そのため、日付順に注文し、次に時間順に注文します。
ありがとう!
あなたの質問に隠された意味があるかどうかはわかりませんが、これを行う標準的な方法は適切であるようです:
... order by eventDate, eventHour
これにより、次のような日付内の時間が得られます。
Feb 15
09:00
12:00
17:00
Feb 23
22:00
: :
これらの2つのフィールドが実際にrealdatetime
フィールドである場合、スキーマは台無しになります。日付にはdate
フィールドがあり、時間にはtime
または整数フィールドが必要です。
could両方を1つのdatetime
フィールドに結合しますが、それらを分離する場合は、select
ステートメントで行ごとの関数を実行する非効率性とバランスを取る必要があります。 。フィールドを明確に使用する場合は、通常、フィールドを分離しておくことをお勧めします。
do行ごとの関数を使用する必要がある場合は、次を使用できます。
date(datetime_column)
time(datetime_column)
date
のtime
およびdatetime
コンポーネントのみを抽出します。
データを最新のイベント日付として最初にリストしたい場合、同じ日付のレコードが存在する場合、データは時間でソートされます。つまり、最新の時刻が最初です。
以下のように試すことができます
select * from my_table order by eventDate DESC, eventHour DESC
eventDate
とeventHour
の両方がDateTime
である場合、それらを同じフィールドに保存してみませんか?
現在のスキームで必要なものを取得するには、次のようにします。
SELECT * FROM table
ORDER BY
EXTRACT(YEAR_MONTH FROM eventDate),
EXTRACT(DAY FROM eventDate),
EXTRACT(HOUR FROM eventHour)
しますか
select * from my_table order by eventDate, eventHour
うまくいかない?
リストを使用するだけで、必要な数だけ注文できます。最初の値、次に2番目の値の順に並べられます...など。
SELECT *
FROM table
ORDER BY eventDate, eventHour
2つの日時フィールドがある場合は、次のようなものを使用して、日付のみまたは時間のみを取得できます。
SELECT *
FROM table
ORDER BY DATE_FORMAT(eventDate, '%d'), DATE_FORMAT(eventHour, '%h')
IDの降順で並べ替えます。
<?php $sql = "SELECT * FROM posts ORDER BY id DESC?>
これはうまくいくはずです
tIMESTAMPを使用して両方のフィールドを結合しないのはなぜですか?
まず、eventDateフィールドをDATEに変換する必要があります。このために、DATE()関数を使用します。
SELECT DATE( eventDate );
その後、eventHourをTIMEに変換します。次のようになります。
SELECT TIME( eventHour );
次のステップは、この2つの関数をTIMESTAMP関数に結合することです。
SELECT TIMESTAMP( DATE( eventDate ), TIME( eventHour ) );
ええ、でもSELECTは必要ありませんが、ORDER BYは必要なので、完全な例は次のようになります。
SELECT e.*, d.eventDate, t.eventHour
FROM event e
JOIN eventDate d
ON e.id = d.id
JOIN eventTime t
ON e.id = t.id
ORDER BY TIMESTAMP( DATE( d.eventDate ), TIME( t.eventHour ) );
これがお役に立てば幸いです。
まず、異なるフィールドで日付と時刻を保存することは悪い習慣です。
とにかく、適切な形式で日付/時刻を保存していると仮定します。 (つまり、日付形式はyyyy-mm-ddで、時刻はhh:ssです)
日時の値を取得するには、最初に日付と時刻を連結する必要があります。技術的に言えば、DatetimeフィールドでORDER BYを実行できますが、これを再度行うことはお勧めできません。この場合、CONCATを実行すると、これが文字列に変換されるため、結果セットが正しくなくなります。したがって、注文を行うには、UNIXTIMESTAMPに変換する必要があります。
ORDERby句の前の日時フィールドでUNIX_TIMESTAMPを実行することをお勧めします。
次のクエリを使用できます。
SELECT column1、column2、NIX_TIMESTAMP(CONCAT(event_date
、 ''、event_time
))as unixtimestamp from table_name order by unixtimestamp desc;
注:(CONCAT関数のevent_dateとevent_timeの間にスペースがあります。ここでは正しく表示されません。)
これは私にとって最善の方法であり、関数to_days(date)で日付を日数に変換し、関数TIME_TO_SEC(time)で時間を秒数に変換するだけです。 =、例:
SELECT
nv.destac,
DATE_FORMAT(nv.date_nov , '%d-%m-%Y %T') as date_order,
TO_DAYS(nv.date_nov) as days,
TIME_TO_SEC(TIME(nv.date_nov)) as seconds
FROM
newsviews nv
WHERE
nv.active
ORDER BY
nv.destac DESC, days DESC, seconds DESC ;
Esta es la mejorformaquefuncionóparamí、sóloconvertirlafechaalnúmerodedíasconlafunciónTO_DAYS(fecha) y el tiempo a la cantidad de segundos con la funcion TIME_TO_SEC(tiempo )
SELECT
nv.destacar,
DATE_FORMAT(nv.fecha_nov , '%d-%m-%Y %T') as fecha_orden,
TO_DAYS(nv.fecha_nov) as dias,
TIME_TO_SEC(TIME(nv.fecha_nov)) as segundos
FROM
novedades nv
WHERE
nv.activa
ORDER BY
nv.destacar DESC, dias DESC, segundos DESC ;