私はそれのようなテーブルを持っています。最速のクエリでMysqlデータベースからデータを取得
私は最速のクエリで日付と時刻の「コスト」のベースを取得したいです。例えば
:
入力:
id_room = 1;
date = 2017/03/24
time from: 05:30:00
time end: 07:30:00
コラム "コスト" は時間あたりのコストを意味します。
timeFromからtimeEndまでの費用を取得する方法は?要するに
私はそれのようなテーブルを持っています。最速のクエリでMysqlデータベースからデータを取得
私は最速のクエリで日付と時刻の「コスト」のベースを取得したいです。例えば
:
入力:
id_room = 1;
date = 2017/03/24
time from: 05:30:00
time end: 07:30:00
コラム "コスト" は時間あたりのコストを意味します。
timeFromからtimeEndまでの費用を取得する方法は?要するに
:
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');
説明:
WEEKDAY
はあなたに与えられた日付の平日部分を与えますGREATEST
とLEAST
あなたは交差する時間範囲を取得します。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')
コストは、時間あたりの価格は何ですか?
timediff
とtime_to_sec