У меня есть две таблицы
table_school
school_open_time|school_close_time|school_day
8:00 AM | 9:00PM | Monday
10:00 AM | 7:00PM | Wednesday
table_college
college_open_time|college_close_time|college_day
10:00 AM | 8:00PM | Monday
10:00 AM | 9:00PM | Tuesday
10:00 AM | 5:00PM | Wednesday
Теперь я хочу выбрать school_open_time
school_close time
, college_open_time
и college_close_time
в соответствии с сегодняшним днем (означает college_day=school_day=today
), а также, если в какой-либо одной таблице нет строки для определенного дня, тогда отобразить пустое поле (LEFT JOIN
, думаю, что смогу использовать).
Пожалуйста, предложите мне лучший и оптимизированный запрос для этого.
UPDATE:
если для школы нет открытого и закрытого времени, то должны быть возвращены College_open_time и College_close_time (не заполняются в базе данных, просто возвращаются) как school_open_time и school_close_time. и всегда должно быть College_open_time и College_close_time для данного дня
я использую запрос ниже
SELECT college_open_time,college_close_time ,school_open_time,
school_close_time FROM tbl_college
LEFT JOIN tbl_school ON school_owner_id=college_owner_id
WHERE college_owner_id='".$_session['user_id']."' AND
college_day='".date('l',time())."'";
он возвращает одну строку (левая рука имеет некоторое значение, а правая рука имеет пустое значение), когда в таблице table_school нет строки данного дня, НО отображает семь строк с одинаковым значением в левой части (college_open_time, College_close_time) и 6 пустая строка справа (school_open_time и school_close_time)
i need only one row when both table have a row of a given day
, но используя приведенный выше запрос, возьмите только первую строку соответствующей table_school, где school_owner_id равен 50 (let), при этом не видно условия, что имя school_day должно быть присвоено day
Подробнее ОБНОВЛЕНИЕ @ 37 звезд
Есть небольшая проблема, дорогая,
тип данных school_close_time и school_open time TIME
тогда как тип данных College_open_time и College_close_time имеет тип VARCHAR
.
Я использовал приведенный ниже код, но я немного изменил его и приближаюсь к результату,
но теперь скажите мне, где я должен написать IFNULL в следующем фрагменте кода
IFNULL (TIME_FORMAT ()) или TIME_FORMAT (IFNULL ())
SELECT TC.owner_id,college_open_time AS collegeOpen,
college_close_time AS collegeClose,
TIME_FORMAT(school_open_time, '%h:%i %p' ) AS schoolOpen,
TIME_FORMAT(school_close_time, '%h:%i %p' ) AS schoolClose
FROM tbl_college TC
LEFT JOIN tbl_school TS ON TS.owner_id = TC.owner_id
AND TC.college_day = TS.school_day
WHERE college_day = DATE_FORMAT(NOW(),'%W')
Решение
Спасибо 37stars, ты, гениальный, спасибо за идею IFNULL,
я пишу ОПТИМАЛЬНЫЕ И ЛУЧШИЕ ЗАПРОСЫ
SELECT TC.owner_id,college_open_time AS collegeOpen,college_close_time AS
collegeClose, IFNULL(TIME_FORMAT(school_open_time, '%h:%i %p'),college_open_time)
AS schoolOpen,IFNULL(TIME_FORMAT(school_close_time, '%h:%i %p',college_close_time)
AS schoolClose FROM tbl_college TC LEFT JOIN tbl_school TS
ON TS.owner_id = TC.owner_id AND TC.college_day = TS.school_day
WHERE college_day = DATE_FORMAT(NOW(),'%W')
FROM tbl_storecalendar TS LEFT JOIN tbl_delivery_hours TD
ON TD.store_id = TS.store_id
AND TD.del_day = TS.dayName WHERE dayName = DATE_FORMAT( NOW( ) , '%W' )