2017-03-23 6 views
-1

私はそれのようなテーブルを持っています。最速のクエリでMysqlデータベースからデータを取得

enter image description here

私は最速のクエリで日付と時刻の「コスト」のベースを取得したいです。例えば

入力:

id_room = 1; 
date = 2017/03/24 
time from: 05:30:00 
time end: 07:30:00 

コラム "コスト" は時間あたりのコストを意味します。

timeFromからtimeEndまでの費用を取得する方法は?要するに

+0

コストは、時間あたりの価格は何ですか?timedifftime_to_sec

  • 合計と時間との差を計算しますか – Qirel

  • 答えて

    1

    SELECT SUM((time_to_sec(timediff(LEAST('07:30:00', timeTo), GREATEST('05:30:00', timeFrom)))/3600) * cost) 
    FROM `roomcost` r 
    WHERE WEEKDAY('2017-03-23') BETWEEN dayFrom AND dayTo 
    AND (timeFrom <= '05:30:00' OR timeTo >= '07:30:00') 
    AND id_room = 1 
    

    私のテストデータ:

    INSERT INTO `roomcost` (`id`, `id_room`, `dayFrom`, `dayTo`, `timeFrom`, `timeTo`, `cost`) VALUES 
    (1, 1, 1, 6, '05:00:00', '06:00:00', '50.00'), 
    (2, 1, 1, 6, '06:00:00', '17:00:00', '100.00'), 
    (3, 1, 0, 0, '05:00:00', '10:00:00', '200.00'); 
    

    説明:

    1. があなたのroomcostテーブルからすべての有効な行を選択します。 WEEKDAYはあなたに与えられた日付の平日部分を与えます
    2. GREATESTLEASTあなたは交差する時間範囲を取得します。
    3. それは

    SELECT r.*, GREATEST('05:30:00', timeFrom) AS startTime, LEAST('07:30:00', timeTo) AS endTime , time_to_sec(timediff(LEAST('07:30:00', timeTo), GREATEST('05:30:00', timeFrom)))/3600 , (time_to_sec(timediff(LEAST('07:30:00', timeTo), GREATEST('05:30:00', timeFrom)))/3600) * cost FROM roomcost r WHERE WEEKDAY('2017-03-23') BETWEEN dayFrom AND dayTo AND (timeFrom <= '05:30:00' OR timeTo >= '07:30:00')

    +0

    ありがとうございました。もう一回。 「コスト」の欄は時間当たりのコストを意味します。 timeFromからtimeToまで正確な量の時間を得るのを助けてくれますか? – Sam

    +0

    次に、入力された時間範囲は、同じ日に2スケールのコストです。 – Sam

    +0

    SUM((time_to_sec(timediff(LEAST('07:30:00 '、timeTo)、GREATEST('05:30:00'、timeFrom)))/ 3600)* cost) が予約されています。 –

    関連する問題