SELECT
( SELECT COUNT(*) FROM messages WHERE odbiorca=$id AND bla>0 LIMIT 1 ) as `col1` ,
( SELECT COUNT(*) FROM messages WHERE odbiorca=$id AND bla=1 AND nieprzeczytana='yes' LIMIT 1 ) as `col2` ,
( SELECT COUNT(*) FROM messages WHERE wyslane=$id AND saved='yes' LIMIT 1 ) as `col3` ,
FROM messages LIMIT 1
Nie sądzę aby to działało poprawnie, te limit 1 spowodują że nigdy nie zobaczysz że odebrano 2 wiadomości.
Może lepiej tak:
select
sum(if(odbiorca=$id,1,0)) col1,
sum(if(odbiorca=$id and bla=1 AND nieprzeczytana='yes',1,0) col2,
sum(if(wyslane=$id,1,0)) col3
where
(odbiorca=$id and bla>0) or ( wyslane=$id AND saved='yes')
;