You can try the following:
SELECT u.name,
IFNULL(sub_p.total, 0) num
FROM users u
LEFT JOIN ( SELECT COUNT(*) total, user_id
FROM pictures
GROUP BY user_id
) sub_p ON (sub_p.user_id = u.user_id);
Test case:
CREATE TABLE users (user_id int, name varchar(10));
CREATE TABLE pictures (user_id int);
INSERT INTO users VALUES (1, 'Joe');
INSERT INTO users VALUES (2, 'Peter');
INSERT INTO users VALUES (3, 'Bill');
INSERT INTO pictures VALUES (1);
INSERT INTO pictures VALUES (1);
INSERT INTO pictures VALUES (2);
INSERT INTO pictures VALUES (2);
INSERT INTO pictures VALUES (2);
Result:
+-------+-----+
| name | num |
+-------+-----+
| Joe | 2 |
| Peter | 3 |
| Bill | 0 |
+-------+-----+
3 rows in set (0.00 sec)
source
share