【发布时间】:2021-10-02 06:17:44
【问题描述】:
我有一个 SQL 查询,我发现很难将其转换为 Laravel Eloquent 查询。我用工作台试了一下,效果很好。
SELECT fi.id,fi.internal_name,fi.nombre_contacto,fi.apellidos_contacto,fi.category,
COALESCE(SUM(fi.totalClicks), 0) AS totalclicks FROM(
SELECT af.id,af.internal_name,af.nombre_contacto,
af.apellidos_contacto,af.category,SUM(afc.clicks) AS totalClicks
FROM afiliados_referral_clicks afc, afiliados af WHERE afc.idAfiliado = af.id
and fecha >= DATE('2021-07-01') AND fecha<= DATE('2021-07-31')
GROUP BY af.id
UNION
SELECT af.id,af.internal_name,af.nombre_contacto,
af.apellidos_contacto,af.category, 0 AS totalClicks
FROM afiliados af ) as fi
GROUP BY fi.id
LIMIT 7000
;
我尝试了什么?我可以看到查询中有 3 个 SELECT,外部一个(父级)。
SELECT fi.id,fi.internal_name,fi.nombre_contacto,fi.apellidos_contacto,fi.category,COALESCE(SUM(fi.totalClicks), 0) AS totalclicks
FROM(somewhere as fi)
还有两个内部的(child1)。
SELECT af.id,af.internal_name,af.nombre_contacto,
af.apellidos_contacto,af.category,SUM(afc.clicks) AS totalClicks
FROM afiliados_referral_clicks afc, afiliados af WHERE afc.idAfiliado = af.id
and fecha >= DATE('2021-07-01') AND fecha<= DATE('2021-07-31')
GROUP BY af.id
UNION
something
child2
something
UNION
SELECT af.id,af.internal_name,af.nombre_contacto,
af.apellidos_contacto,af.category,0 AS totalClicks
我的方法是进行 3 个单独的查询并将它们合并。
child1
$child1 = $db->table($db::raw('afiliados, afiliados_referral_clicks'))
->whereColumn('afiliados.id','=','afiliados_referral_clicks.idAfiliado')
->addSelect(['afiliados.id','internal_name','nombre_contacto','apellidos_contacto'])
->selectRaw("COALESCE(SUM(clicks), 0) AS totalClicks")
->whereBetween('afiliados_referral_clicks.fecha',[$params['fechaReservaFrom'],$params['fechaReservaTo']])
->groupBy('afiliados.id')
;
child2
$child2 = $db->table('afiliados')
->addSelect(['id','internal_name','nombre_contacto','apellidos_contacto'])
->selectRaw("0 AS totalClicks")
;
父母会联合两个孩子。
$parent = $child1->union($child2)
->addSelect(['afiliados.id','afiliados.internal_name','afiliados.nombre_contacto','afiliados.apellidos_contacto'])
->selectRaw("COALESCE(SUM(totalClicks), 0) AS totalClicks")
->get()
;
但在执行代码时出现此错误。
400 (SQLSTATE[42S22]: 未找到列: 1054 未知列 “字段列表”中的“总点击次数”
我认为我在正确的轨道上,如果我返回 $child1->get() 或 $child2->get() 我得到的集合就好了,我相信问题在于 $parent 因为我不知道如何访问我在 $child2 中添加的 totalClicks 列。
当然,那是我尝试过的,我仍然可能有一些可怕的错误,希望你们能帮助我。
【问题讨论】:
-
你试过什么?您在尝试中遇到过错误/困难吗?
标签: mysql sql laravel eloquent