Ну, вывести результат придется самостоятельно. А вариантов запросов множество. Через JOIN, через вложенные запросы, через группировку по значению, но в любом случае с агрегацией. Далее примеры решения, без знания структуры Ваших данных и без оптимизаций. В первом случае Вы получите по 2 (и более) строки на каждого пользователя (
например, user_id=1, status='ok', name= 'John galt', status_count=2 и user_id=1, status='trash', name= 'John galt', status_count=67):
SELECT *, COUNT(status) as status_count FROM table_name WHERE name = :name GROUP BY user_id, status;
В этом случае получите 1 строку на каждого пользователя, но запрос, возможно, тяжелее (
user_id=1, name= 'John galt', status_ok_count=2, status_trash_count=95)
SELECT COUNT(ok.status) as status_ok_count, COUNT(trash.status) as status_trash_count, table_name.user_id, table_name.name
FROM table_name WHERE name=?
INNER JOIN table_name as ok ON ok.user_id = table_name.user_id
INNER JOIN table_name as trash ON trash.user_id = table_name.user_id
WHERE table_name.name = :name AND ok.status = 'ok' AND trash.status='trash'
GROUP BY table_name.user_id;
PS Есть смысл делать выборку не по имени, а по идентификатору, если надо получить данные на пользователя (а не найти именно по имени), запросы по первичному ключу всегда существенно быстрее.