Php sql联接未正确显示
我当前正在尝试使用左连接连接两个表: --入口--Php sql联接未正确显示,php,mysql,join,Php,Mysql,Join,我当前正在尝试使用左连接连接两个表: --入口-- id_门户(索引) id_地点 门户名称 --通路-- id_访问(索引) id_事件 id_门户 身份证 扫描存取 “访问”包含每个门户中每个事件的多个票证类型。我需要将这些组合起来,以获得每个门户的扫描访问列的总和,但包括具有“null”扫描访问权限的门户,以得到“0”。为了实现这一点,我使用了左连接: 选择portal.name\u portal,SUM(access.scan\u access)作为total\u scan
- id_门户(索引)
- id_地点
- 门户名称
--通路--
- id_访问(索引)
- id_事件
- id_门户
- 身份证
- 扫描存取
“访问”包含每个门户中每个事件的多个票证类型。我需要将这些组合起来,以获得每个门户的扫描访问列的总和,但包括具有“null”扫描访问权限的门户,以得到“0”。为了实现这一点,我使用了左连接:
选择portal.name\u portal,SUM(access.scan\u access)作为total\u scan
从portal左侧加入portal.id\u portal=access.id\u portal上的访问
其中portal.id_地点=$venueId
按门户进行分组。id\u门户
按门户订购。id\u门户ASC
这意味着我得到了以下信息:
- 门户1-空
- 入口2-40
- 入口3-33
- 门户4-空
选择portal.name\u portal,SUM(access.scan\u access)作为total\u scan
从portal左侧加入portal.id\u portal=access.id\u portal上的访问
其中portal.id_场所=$venueId和access.id_事件=20
按门户进行分组。id\u门户
按门户订购。id\u门户ASC
我得到:
- 入口2-40
- 入口3-33
这是有意义的,因为只有这两行具有id\u事件值。但是我怎样才能在不失去其他门户的情况下考虑到这个问题呢?另外,在sql中是否有方法在返回结果时将“null”设为零?(我可以在使用php之后修复null,但想看看是否有可能)要将null转换为0,请使用此
COALESCE(col, 0)
在您的示例中,它将是
SUM(COALESCE(access.scan_access, 0)) AS total_scan
通过将
access.id\u event=20
放在WHERE
子句中,可以将左连接变成内部连接。将access.id\u event=20
移动到您的加入条件中,以保留您的左加入
。正如@echo_me所提到的,您可以使用COALESCE()
来去除零。我会把它放在SUM()
周围,而不是放在里面
选择portal.name\u portal,合并(SUM(access.scan\u access),0)作为总扫描
从门户左侧在portal.id_portal=access.id_portal和access.id_event=20上加入访问
其中portal.id_地点=$venueId
按门户进行分组。id\u门户
按门户订购。id\u门户ASC
你能举例说明你想要输出的方式吗?我不确定你编辑了什么ThinkingTiffi制作了它,因此SQL不是全部在一行上,并添加了格式提示,因此它是彩色的。啊,我不喜欢通常将它放在不同的行上。除了阅读还有什么好处吗?对于问题来说,阅读要容易得多。