MySQL 查询 : all records of one table plus count of another table

标签 mysql

我有 2 个表:用户和图片。 Picture 表具有用户的键。所以基本上每个用户可以有多张图片,每张图片属于一个用户。 现在,我正在尝试进行以下查询:我想选择所有用户信息加上他拥有的图片总数(即使它是 0)。我怎样才能做到这一点?可能这听起来很简单,但我一直在尝试,但似乎找不到正确的查询。我唯一可以选择的是此信息,但仅适用于至少拥有 1 张图片的用户,这意味着图片表至少有该键的一条记录......但我也想考虑没有任何图片的用户.任何想法? 谢谢!

最佳答案

您可能想尝试以下方法:

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);

测试用例:

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);

结果:

+-------+-----+
| name  | num |
+-------+-----+
| Joe   |   2 |
| Peter |   3 |
| Bill  |   0 |
+-------+-----+
3 rows in set (0.00 sec)

关于MySQL 查询 : all records of one table plus count of another table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2839738/

相关文章:

php - 如何让这个登录系统更安全

mysql - 我如何确保 MySQL 正在使用所有可用内存?

php - 提高 varchar 字段中的搜索性能

mysql - 查找不匹配的 ID

mysql - SQL中基于值的条件在哪里?

mysql - SQL语句: How do I get the highest rating and the product for each location?

MySQL 执行 utc_date + 1 而不是使用 date_add(utc_date, Interval 1 day) 的含义

PHP MySQL 查询返回错误字符

php - 我使用 mysql_real_escape_string 对吗?

php - 无需准备语句即可缩短代码