php - 多个左连接不适用于子查询

标签 php mysql sql

我知道已经发布了一个与此类似的问题,但我无法通过尝试在 google 上找到的东西找到我的 sql 查询的问题

我收到的错误是“您的 SQL 语法有误”

这是我的代码

select 
    campaigns.campaign_name,
    calls.count,
    first.count as first,
    second.count as second,
    third.count as third,
    fourth.count as fourth,
    fifth.count as fifth,
    sixth.count as sixth
    from campaigns
    LEFT JOIN 
    (
        select count(*) as count, campaign_id FROM calls where direction = 'Incoming' group by campaign_id
    ) as calls
    ON campaigns.id = calls.campaign_id
    LEFT JOIN 
    (
        select count(*) as count, 
        campaign_id FROM calls 
        where direction = 'Incoming' 
        AND DATE(created_at) BETWEEN '2014-01-01' AND '2016-01-01'
        group by campaign_id
    ) as first
    LEFT JOIN 
    (
        select count(*) as count, 
        campaign_id FROM calls 
        where direction = 'Incoming' 
        AND DATE(created_at) BETWEEN '2014-01-01' AND '2016-01-01'
        group by campaign_id
    ) as second
    ON campaigns.id = second.campaign_id
    LEFT JOIN 
    (
        select count(*) as count, 
        campaign_id FROM calls 
        where direction = 'Incoming' 
        AND DATE(created_at) BETWEEN '2014-01-01' AND '2016-01-01'
        group by campaign_id
    ) as third
    ON campaigns.id = third.campaign_id
    LEFT JOIN 
    (
        select count(*) as count, 
        campaign_id FROM calls 
        where direction = 'Incoming' 
        AND DATE(created_at) BETWEEN '2014-01-01' AND '2016-01-01'
        group by campaign_id
    ) as fourth
    ON campaigns.id = fourth.campaign_id
    LEFT JOIN 
    (
        select count(*) as count, 
        campaign_id FROM calls 
        where direction = 'Incoming' 
        AND DATE(created_at) BETWEEN '2014-01-01' AND '2016-01-01'
        group by campaign_id
    ) as fifth
    ON campaigns.id = fifth.campaign_id
    LEFT JOIN 
    (
        select count(*) as count, 
        campaign_id FROM calls 
        where direction = 'Incoming' 
        AND DATE(created_at) BETWEEN '2014-01-01' AND '2016-01-01'
        group by campaign_id
    ) as sixth
    ON sixth.campaign_id = campaigns.id
    group by campaigns.id

错误似乎在第69行 sql 查询的最后第二行 ON sixth.campaign_id = campaigns.id

最佳答案

没有理由进行如此复杂的查询。只需使用条件聚合:

select c.campaign_name,
       sum(direction = 'Incoming') as cnt,
       sum(direction = 'Incoming' and DATE(created_at) BETWEEN '2014-01-01' AND '2016-01-01') as first,
       . . .
from campaigns c left join
     calls
     on c.campaign_id = calls.campaign_id
group by c.campaign_name;

您的所有条件似乎都相同,但您可以为其他条件添加额外的 sum()

关于php - 多个左连接不适用于子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33896620/

相关文章:

php - 在 mysql 中选择 LIKE 之前的最后 x 行

mysql - 如何从一个表中选择最后一行然后更新另一个表的最后一行?

php - 从 CSV 给出错误的数组关联以导入到 mysql

php - 如何将元素(下拉菜单项)定位在父菜单的正下方

PHP对象映射最好的方法

mysql - 如何根据行使用多个值填充表的字段

php - AJAX 登录表单 : Undefined PHP variables

mysql - localhost/phpmyadmin 给出页面未找到错误

mysql - 使用具有换行符的列导出 MySQL 中的表

mysql - 在 mySQL 中遇到 WHERE DATEDIFF 问题