나는 레스토랑에 대한 opening_hours
있는 테이블이 있습니다SQL "먼저 관련 일"
SELECT * FROM opening_hours;
+----+---------------+------------+----------+-----+
| id | restaurant_id | start_time | end_time | day |
+----+---------------+------------+----------+-----+
| 1 | 1 | 12:00:00 | 18:00:00 | 1 |
| 2 | 1 | 09:00:00 | 19:00:00 | 4 |
| 3 | 2 | 09:00:00 | 16:00:00 | 4 |
| 4 | 2 | 09:00:00 | 16:00:00 | 5 |
| 5 | 3 | 09:00:00 | 16:00:00 | 4 |
| 6 | 3 | 09:00:00 | 16:00:00 | 5 |
| 7 | 3 | 09:00:00 | 16:00:00 | 1 |
| 8 | 3 | 09:00:00 | 16:00:00 | 6 |
+----+---------------+------------+----------+-----+
http://www.sqlfiddle.com/#!2/eaea09/1
가 지금은 현재에 대한 모든 레스토랑에 대해 "가장 가까운"다음 날 또는 같은 날 가져 오려는 일. 나는이 작업을 수행 할 수있는 일 1
의 경우
restaurant_id: 1 day: 1
restaurant_id: 2 day: 4
restaurant_id: 3 day: 1
: 현재 하루 1
예를 들어 결과가 될 것
SELECT day FROM opening_hours WHERE day >= 1 GROUP BY restaurant_id LIMIT 1
을하지만 오늘은 6
이 될 것입니다 경우 그 작동하지 않을 것입니다. 나는 일 (7
)의 최대 숫자를 얻고 그 것이 찾아 낼 수없는 경우에 찾아내는 질문이 1
에서 다시 시도 시작해야 할 것입니다. 그래서 하루 6
에 대한 결과는이 경우에있을 것입니다 :
restaurant_id: 1 day: 1
restaurant_id: 2 day: 4
restaurant_id: 3 day: 6
어떻게 쿼리에이를 수 있을까?
나는 의사 SQL에서 이런 일이 될 수 있다고 생각 것 :
SELECT `day` FROM opening_hours WHERE `day` >= 'today' IF NOT FOUND WHERE `day` >= 1 GROUP BY `restaurant_id` LIMIT 1
편집 :
내가이 쿼리를 실행하고, 레스토랑 일치하는 항목이 처음 발견되었을 경우 결정할 수있다 . 그렇지 않은 경우 두 번째 쿼리를 실행하십시오. 그러나 더 좋은 방법이 있어야합니다. 그런
나는 이것을 좋아한다. <3 잘 작동하는 것 같습니다. – Matthijn