Я хотел бы попросить о помощи в понимании этот кусок кода ... новичок в MySQL, так что я нашел, что это трудно читать, что делает этот код ...Запрос: Я не понимаю, этот кусок кода
SELECT b.bcode
FROM (SELECT bcode FROM tbl_items
UNION
SELECT bcode FROM tbl_items_bulk
) b left outer join
tbl_reservation r
on b.bcode = r.bcode and
@USERTO <= r.ToDate and
@USERFROM >= r.FromDate
WHERE r.bcode is null;
Помогло бы мне понять, что делает этот код? Спасибо заранее!
@Ashutosh Arya, я пытался получить все предметы, которые не были зарезервированы для даты и времени. Будучи «зарезервированным», оборудование должно присутствовать в tbl_reservations. Я просто пытаюсь получить противоположное от получения всего оборудования на определенную дату и время.
Логика:
- получить все оборудование bcode в настоящее время в tbl_items, tbl_items_bulk (UNION).
- получить все оборудование bcode, которое в настоящее время присутствует в tbl_reservations, и посмотреть, есть ли совпадения с UNION в номере 1.
- если есть совпадения, отфильтруйте результаты в дальнейшем, используя resDate (дата резервирования). ** это приводит к тому, что НЕ отображает все коды b, которые имеют resDate, указанный пользователем.
- Если есть еще совпадения, отфильтруйте результаты в дальнейшем с использованием времениSTART и времениEND.
Значение сказать, -оборудование bcode существует в tbl_reservations, НЕ ОТОБРАТЬ ЭТО. - если в tbl_reservations существует файл bcode, но он не имеет resDate, который пользователь укажет, а затем SHOW. - если в tbl_reservations имеется файл bcode, есть resDate, который пользователь укажет, но не имеет времени, на которое распространяется времяStart и timeEnd, затем SHOW IT.
Кажется, что мой код проверяет только дату. Я думал о чем-то, что проверяет даты и время, а также, как:
SELECT b.*
FROM (SELECT * FROM tbl_items
UNION
SELECT * FROM tbl_items_bulk
) b left outer join
tbl_test t
on b.bcode = t.bcode and
'2013-09-16' = t.resDate AND
'9:30' <= t.timeSTART AND
'7:00' >= t.timeEND
WHERE t.bcode is null;
, а также, моя система не позволяет оборудование заимствования в течение длительного периода времени. Любой человек не может занять оборудование более 7:00 утра 9:00 вечера (15 часов).
Вот последний код (timeFROM и TimeTo изменен timeSTART и timeEND, потому что моя система не позволяет более 15hours резервирования в день и не позволяет бронирование более чем на 1 день):
SELECT b.*
FROM (SELECT * FROM tbl_items
UNION
SELECT * FROM tbl_items_bulk
) b left outer join
tbl_test t
on b.bcode = t.bcode and
NOT ('4:30' < t.timeSTART OR '7:00' > t.timeEND)
WHERE t.bcode is null;
Что на самом деле вы не понимаете? 'UNION',' JOIN', вложенный запрос, пользовательские переменные '@ VAR'? – zerkms
Цель @VAR в этом запросе - одна из вещей, которые я не понимаю. – user2784251
Он находит все записи, которые присутствуют в таблице tbl_items, между двумя датами _USERTO и _USERFROM, вид объединения кажется избыточным –