【问题标题】:query not returning expected result?查询未返回预期结果?
【发布时间】:2017-08-22 13:03:50
【问题描述】:

我有 2 张桌子:

1)report_details

2) 报告

查询:

SELECT COUNT(channel),DATE_FORMAT(date,'%d/%m/%Y') AS niceDate,
    channel FROM `report_details`
JOIN report on report.report_id=report_details.report_id
where report.report_hash='abcd'
GROUP BY  channel,niceDate;

输出

预期输出

【问题讨论】:

  • 寻求帮助时,请保持直截了当。像“请帮助我”和悲伤表情这样的信息是乞讨的形式,这在接近志愿者时并不理想。理想情况下,如果你能解释你试图解决问题的方法,那也很好——我们每天都有很多人在这里尝试五分钟,然后很快就放弃了。不要成为那个人!

标签: mysql sql laravel


【解决方案1】:
 $value =  DB::table('report_details')
 ->join('reports','report_details.report_id','=','reports.report_id')
 ->groupBy('channel')->get();

// print_r($value);
 also use DB; in your controller

【讨论】:

  • 一个好的答案将始终解释所做的事情以及为什么以这种方式完成,不仅是为了 OP,而且是为了未来的 SO 访问者。
  • 这似乎是一个 SQL 问题的 Laravel 答案?
  • @halfer 公平地说,问题标记为 Laravel
  • @ChrisForrence: 是的,但是 OP 似乎确实在尝试 SQL,所以虽然这可能会有所帮助,但它并不能解释 OP 的问题:-)
【解决方案2】:

问题: 据我所知,您的查询存在问题,看来您需要的不仅仅是一个简单的 group by,因为您需要一个聚合。因此,您可能想使用 GROUP_CONCAT() 来获取您的频道,但如果您想将同一日期的所有频道分组在 1 行但使用分隔符,您将需要一个内部选择

修改后的查询

SELECT GROUP_CONCAT(cnt),niceDate,GROUP_CONCAT(channel)channel FROM
(
  SELECT COUNT(channel) as cnt ,DATE_FORMAT(date,'%d/%m/%Y')
  AS  niceDate,group_concat(channel) channel
  FROM `report_details` JOIN report on report.report_id=report_details.report_id
  where report.report_hash='abcd' GROUP BY  chanel,niceDate
) f
GROUP BY niceDate ;

解释

  • 我将第一个查询作为内部选择,这样您就可以将同一日期的所有通道放在 1 行中,您不能在 1 个选择中执行此操作,因为 Group_Concat 不能在内部进行计数,除非它来自像这个例子中的内部选择
  • 我添加了 group_concat(chanel) 的使用,这样您就可以得到 chanel 的列表,而不是单独一行

如果您想了解有关 group_concat 的更多信息,请点击此处的文档链接: Documentation

【讨论】:

  • 计数不正确
  • @midhunk 我用内部选择更新了代码,所以告诉我它是否有效
【解决方案3】:

使用GROUP_CONCAT()函数:

SELECT GROUP_CONCAT(COUNT),GROUP_CONCAT(channel)channel,niceDate FROM
(
    SELECT COUNT(channel)COUNT, DATE_FORMAT(date, '%d/%m/%Y') AS niceDate,channel 
    FROM `report_details` 
    JOIN report ON report.report_id = report_details.report_id 
    WHERE report.report_hash = 'abcd' 
    GROUP BY niceDate,channel 
)Z
GROUP BY niceDate ;

【讨论】:

  • @Chris 我的另一个声明在哪里??
  • 请不要在您的答案中添加“希望这有帮助”——因为没有人希望它没有帮助,它完全是多余的。你似乎已经添加了这个to 219 answers,这是一个志愿者编辑要做的大量清理工作。
  • @SagarGangwal 使用的语言(“...可以在上面尝试...”,“希望这会有所帮助”)削弱了您的答案;这让它看起来更像是一个猜测。
  • @ChrisForrence Okey 克里斯我明白了..!! 特别感谢
猜你喜欢
  • 2014-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-31
  • 2016-04-12
  • 2015-05-02
相关资源
最近更新 更多