【问题标题】:Eloquent join table on date日期上的雄辩联接表
【发布时间】:2016-10-11 05:10:24
【问题描述】:

点击表架构:

user_id as (integer)
created_at as (Y-m-d H:i:s)

查看表

user_id as (integer)
created_at as (Y-m-d H:i:s)

我需要按日期而不是日期时间计算第一个表 + 第二个表组中的记录:

现在我正在使用 2 个查询:

$clicks = $user->clicks()
->select(\DB::raw("DATE_FORMAT(created_at, '%d/%m/%Y') as date"),
        \DB::raw("COUNT(*) as clicks"))
->groupBy('date')
->orderBy('date', 'ASC')
->get()->toArray();

$views = $user->views()
->select(\DB::raw("DATE_FORMAT(created_at, '%d/%m/%Y') as date"),
    \DB::raw("COUNT(*) as views"))
->groupBy('date')
->orderBy('date', 'ASC')
->get()->toArray();

在我有一个循环之后

$out = [];
    for ($i=0; $i < count($views); $i++) { 
        $out[] = [
            'date' => $views[$i]['date'],
            'clicks' => $clicks[$i]['clicks'],
            'views' => $views[$i]['views']
        ];
    }

但是这样如果点击存在并且在某个日期查看 no 它不会将它添加到数组中 可以按日期格式加入 created_at 吗?没时间?

【问题讨论】:

    标签: php mysql laravel eloquent morris.js


    【解决方案1】:

    因为 MySQL 不支持全连接试试这个

    select date(clicks.created_at)as 'Date',
    count(clicks.user_id) as 'clicks',
    count(views.user_id)as 'views'
    from clicks
    left join views on date(views.created_at)=date(clicks.created_at)
    group by date(clicks.created_at)
    
    union
    
    select date(views.created_at)as 'Date',
    count(clicks.user_id) as 'clicks',
    count(views.user_id)as 'views'
    from views
    left join clicks  on date(views.created_at)=date(clicks.created_at)
    group by date(views.created_at)
    

    由于您的查询中有计数,请尝试此查询

    select a.Date,a.clicks,b.views
     from(select date(clicks.created_at)as 'Date',
           count(clicks.user_id) as 'clicks'
           from clicks
           group by date(clicks.created_at))a
     left join (select date(views.created_at)as 'Date',
           count(views.user_id) as 'views'
           from views
           group by date(views.created_at))b
     on a.date=b.date    
    
    union
    
    select a.Date,b.clicks,a.views
     from(select date(views.created_at)as 'Date',
           count(views.user_id) as 'views'
           from views
           group by date(views.created_at))a
     left join (select date(clicks.created_at)as 'Date',
           count(clicks.user_id) as 'clicks'
           from clicks
           group by date(clicks.created_at))b
     on a.date=b.date
    

    【讨论】:

    • 嗯,在 NaviCat 上试过,输出错误,只用了一次日期两次,计数是 +400,但我只有 8))
    • 将 user_id 更改为 *,也许你有空值,并确保你把 group by 放在查询的船上,我忘了把 group by 放在第二个查询中
    • 是的,我尝试添加到两个 groupBy 并将 user_id 更改为 * 仍然相同
    • 我已经添加了第二个查询,请尝试一下
    • 好的作品现在需要设置顺序)))并将其翻译成雄辩的
    猜你喜欢
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    • 2016-05-23
    • 2015-12-05
    相关资源
    最近更新 更多