Ярослав
Мастер
(1827)
3 года назад
я пишу на MySQL, но, думаю, что конструкция выйдет +- универсальной
не уверен, что таблица para вообще нужна, так как она, по сути, не хранит ничего полезного и всё это можно было бы запихать в таблицу расписание, в start_time и end_time хранить при этом дату и время в формате 2021-05-02 20:18:47, а от столбца date в ней избавиться, так как дату при желании можно получить функцией date(start_time)
итого с указанными корректировками имеем:
SELECT a.* FROM office AS a
LEFT JOIN raspisanie AS b ON a.id_office = b.id_office
WHERE CONCAT_WS('.',DATE_FORMAT(b.start_time, "%d"),DATE_FORMAT(b.start_time, "%m"),DATE_FORMAT(b.start_time, "%Y")) = '02.05.2021'
AND b.id_office IS NULL
на IS NULL некоторые интерпретаторы могут жаловаться, но простите, пишу как умею. если есть какой-то более конкретный пример с данными таблиц - был бы рад увидеть и дописать до полностью рабочего варианта
P.S: да и нужно ли хранить end_time вообще, если это start_time +INTERVAL 90 MINUTE...
forcetimeПрофи (516)
3 года назад
Это снова я. Короче я решил не мучиться с датами и просто убрал их из бд. Таблицу ПАРА я оставил, так как проще работать с интовским числом, а не перебирать их по времени. И заменил дату на день недели в виде int значения в виде id. И я теперь хочу получить список аудиторий, которые не заняты в определенную пару и в определенный день недели. Но нифига не получается. Помоги пожалуйста. Вот как пытался сделать. Но не работает
SELECT [office].[id_office],
concat('Корпуc:', korpus, ' Аудитория:',NUMBER) AS AUDIT
FROM [office]
where exists (select id_office from raspisanie
WHERE id_para = 1 AND id_day = 1
)
ЯрославМастер (1827)
3 года назад
у меня выполняется корректно:
SELECT `id_office`,
CONCAT('Корпус: ', `korpus`, ', Аудитория: ', `number`) AS AUDIT
FROM `office`
WHERE `id_office` NOT IN (
SELECT `id_office` FROM `raspisanie`
WHERE `id_para` = 1 AND `id_day` = 1)
остаётся только синтаксис под SQL подправить, но логика должна сохраниться. пример созданных таблиц на скриншоте
Набросал следующее, но чёт фигня какая-то со сравнением даты. Тоесть в SQL servere дата хранится в виде 2020-12-18. А вводится для сравнения из приложения в виде 18.12.2020
SELECT [id_office],
concat('Корпуc:', korpus, ' Аудитория:',number) as AUDIT
FROM [office]
where not exists(select id_raspisanie,convert(varchar (10), date, 104) as [Дата] from raspisanie
where raspisanie.[Дата] ='18.12.2020' and id_office=1)