php - MySQL连接三张表,如果为空则显示0

标签 php mysql sql

我有三个表:

person_table

id| name | gender

1 | Joe | male

2 | Jane |female

3 | Janet | female

4| Jay | male etc...


product_table

id| name

1 | magazine

2 | book

3 |paper

4 | novel

etc...


**person_product

person_id| product_id | quantity

1 | 1 | 1

1 | 3 | 3

2 | 3 | 1

4 | 4 | 2

etc...


我试图进行一个查询,该查询将返回如下表格: 人员编号|人名 |产品名称|数量 但我做不到,如果让我们说约翰没有书,它应该显示 (jons id) 约翰|书|0 而不是仅仅跳过这一行。 我哪里做错了? 这是我设法想出的:

SELECT p.*, f.name, l.quantity 
FROM person_product AS l 
INNER JOIN people_table AS p ON l.person_id=p.id 
INNER JOIN product_table AS f ON l.product_id=f.id
ORDER BY id`

最佳答案

您似乎正在针对具有相关数量的所有产品生成一份关于所有人的报告;在大型数据集上,这可能需要一段时间,因为除了数量之外,您并没有专门将产品与人联系起来:

SELECT
p.id,
p.name,
p.gender,
f.name,
IFNULL(l.quantity,0) AS quantity

FROM person_table AS p

JOIN product_table AS f

LEFT JOIN person_product AS l
    ON l.person_id = p.id
    AND l.product_id = f.id

ORDER BY p.id, f.name

结果是:

enter image description here

这或多或少是您所追求的吗?

关于php - MySQL连接三张表,如果为空则显示0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44670444/

相关文章:

php - codeIgniter 故障转移阵列

php - 基于其他表自动向mysql表添加列的方法

java - 无法从 servlet 访问我的数据库

mysql - 如何在按月分组时获取最近 3 个月的记录

php - 当给定的变量可能没有值时,在 PHP 中强制保留 2 位小数且不使用逗号

php - 具有低数据库压力的简单实时唯一访客计数器?

php - 本地主机中的 XAMPP 延迟

请求数据库后 PHP 7.2 password_verify() 不工作

C# 和 SQL TOP 查询

php - MySQL - 删除特定 ID 值后的行。