01 апреля 2008

LEFT JOIN

Я люблю SQL. Правда, уделяю ему время только при необходимости. В частности, на днях встала задача вывода статистики успешных входов потльзователей в систему. Т.к. в таблицу-лог записываются только попытки входа, то обычное связывание этой таблицы с таблицей пользователей не позволит получить список всех пользователей. А значит, пришло время разобраться с синтаксисом LEFT JOIN. Запрос получился таким (MySQL):


-- заменит null на 0
SELECT uname, IFNULL(y, 0) r from users u,
-- выберет всех пользователей с соответствующим числом
-- успешных входов, а если входов не было, подставит null
(select u.uid, y1.p y from users u left join
-- все успешные входы
(select count(*) p, uid from `identlog`
where loginresult = 1)
using (uid) group by p.uid) y,
where u.uid = y.uid

Комментариев нет: