- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
//В рот мне ноги!
SELECT A.id, MAX(B.date) FROM helpdesk_reference as A
JOIN helpdesk_data as B on B.reference_id = A.id and B.date < DATE_SUB(NOW(), INTERVAL 7 DAY) and B.read = 1
JOIN det1order as C on C.orderdate = order_date and C.ordernum = `order` and A.code = C.code and A.ch = C.ch
JOIN det1order as D ON D.orderdate = order_date and D.ordernum = `order` and A.code = D.code and A.ch = D.ch and C.num = -D.num
WHERE status = 3 and acl_id = 4
GROUP BY A.id
UNION ALL (
SELECT A.id, MAX(B.date)
FROM helpdesk_reference as A
JOIN helpdesk_data as B ON B.reference_id = A.id and B.date < DATE_SUB(NOW(), INTERVAL 7 DAY) and B.read = 1
JOIN det1order as C ON `order` = ordernum and order_date = orderdate and C.code = A.code and A.ch = C.ch and A.user = C.user
WHERE acl_id IN(3, 4) and status = 3 and num = realized
GROUP BY A.id
);
ЗЫЖ Адепты мускуля, плиз, объясните:
Как это?
НЕ понимаю.
Одни AND и в конце hardcoded false => false.
В общем если в поле `read` лежит 0, false, или пустая строка, то он вернет 1 аля true, если там лежит null, то вернет null, если что-то другое - то 0 аля false. Вот.
Под мягким приведением типа имелось в виду то, что он не гнушается складывать числа и строки и юзать в условиях строки и прочую гадость (включая подзапросы, возвращающие много строк), при этом делая неявные касты.
<quote> ::= '
А там каждая СУБД решает нарушать или нет стандарт.
Базы C и D это фильтры перед UNION ALL. Очевидно, что D убирает чуть больше чем C, тогда зачем же этот C нужен.
Да и сам запрос не понятно для чего. Вывод какой-то статистики по пользователям и номерам?