0

私はこのmysqlテーブルを持っており、時刻表はphpで列車を走らせます

Type (INT) | time_start | time_stop
  1        |  09:31:00  | 09:34:00
  1        |  09:43:00  | 09:47:00
  1        |  09:55:00  | 09:58:00
  1        |  10:07:00  | 10:10:00
  1        |  10:33:00  | 10:36:00
  1        |  10:45:00  | 10:47:00
  1        |  10:57:00  | 11:00:00
  1        |  11:12:00  | 11:15:00
  1        |  11:35:00  | 11:38:00

(そしてそれは続きます..) - "type" は時刻表のタイプです。冬、夏などで変わります。 - "type" は INT で、"time_start" と "time_stop" は VARCHAR(8) です。

現在の時刻に応じて、次の 6 つの「電車の時刻」を取得する最も効果的な方法を知りたいです。想像してみてください、今は 09:33:10 です。取得したいのは次のものです。

  1        |  09:43:00  | 09:47:00
  1        |  09:55:00  | 09:58:00
  1        |  10:07:00  | 10:10:00
  1        |  10:33:00  | 10:36:00
  1        |  10:45:00  | 10:47:00
  1        |  10:57:00  | 11:00:00

mysql テーブルで変更を加える必要がある場合は、あなたのアイデアも受け入れます。前もって感謝します ;)

ミゲル。

4

4 に答える 4

2

VARCHAR タイプを TIME タイプに変更して、次のような SQL リクエストを実行するだけです。 SELECT * FROM <yourtable> WHERE time_start > NOW()

于 2013-06-22T11:39:18.537 に答える
0

基本的なアプローチは次のとおりです。

select *
from timetables tt
where tt.time_start > current time
order by tt.time_start
limit 6

これには 2 つの課題があります。最初は真夜中です。おそらく、時刻が夜遅い場合は、早朝の列車も必要です。2 つ目は、時刻を正しい形式に変換することです。

select *
from timetable tt
order by (t.time_start > time(now()) desc,
         tt.time_start
limit 6

トリックは、where条件をに移動することordering clauseです。実際には、これは現在の時刻に注文を開始し、午前 0 時以降も継続します。これにより、ラッピングで 6 つを選択できます。

関数はtime()、比較に必要な変換を行う必要があります。

于 2013-06-22T11:41:27.497 に答える
0

クエリは次のようになります

SELECT * FROM table_name
WHERE time_start >=time(now()) 
LIMIT 6
于 2013-06-22T11:42:04.703 に答える