SELECT COUNT(1) as count
FROM
(
SELECT 1
FROM messages m1
WHERE m1.to = :u
AND m1.deleted_to = '0'
AND m1.unread = '1'
AND m1.from != :u
UNION ALL
SELECT 1
FROM messages m2
JOIN dialogs d1 ON m2.to = -(d1.id)
JOIN dialogs d2 ON d2.id = d1.id
WHERE d1.deleted = '0'
AND d1.owner = '1'
AND d2.user = :u
AND d2.deleted = '0'
AND m2.unread = '1'
AND m2.deleted_from = '0'
AND m2.from != :u
) sel
ID USER TITLE OWNER DELETED
1 1 ... 1 0 # основная запись - создатель диалога
1 2 0 0 # ещё один участник диалога
1 3 0 1 # а этого исключили
2 3 ... 1 1 # а этот диалог вообще удалён
2 1 0 0 # но юзера из него не исключили, однако,
диалог ему больше видеть не нужно