繁体   English   中英

按值更改Mysql组

[英]Change Mysql Group by value

是否可以在MySQL查询中更改GROUP BY参数? 例如,如果用户在下拉列表中按“周”选择期间,则按周对结果分组,如果按“月”然后按月分组,则与“年”相同。 我正在使用Symfony2并从请求中获取$ period变量

 $period = $request->get('period');

 // value of $period are: 'day','week', 'month', 'year' 

 $sql_query = "SELECT COUNT(*), DATE_FORMAT(like_date, \"%y-%m-%d\" ) AS day, 
 WEEK(like_date) as week, MONTH(like_date) as month, YEAR(like_date) as year
 FROM user_likes
 GROUP BY date";

在此查询中,我仅按日期分组。 是否可以在查询中使用CASE更改GROUP BY参数?

RE,您对$ period的评论值为:“天”,“周”,“月”,“年”

这可能是最简单的解决方案

$sql_query = "SELECT COUNT(*), 
                     DATE_FORMAT(like_date, \"%y-%m-%d\" ) AS date, 
                     DAY(like_date) as day, 
                     WEEK(like_date) as week, 
                     MONTH(like_date) as month, 
                     YEAR(like_date) as year
              FROM user_likes
              GROUP BY $period";

假设$period变量包含以下值之一: {'day','week','month','year'}

SET @period := 'month';
SELECT 
                     COUNT(*), 
                     DATE_FORMAT(like_date, "%Y-%m-%d" ) AS date, 
                     DAY(like_date) as day, 
                     WEEK(like_date) as week, 
                     MONTH(like_date) as month, 
                     YEAR(like_date) as year
FROM user_likes
GROUP BY
     CASE 
        WHEN @period = 'day' THEN DATE_FORMAT(like_date,"%Y-%m-%d")
        WHEN @period = 'week' THEN WEEK(like_date) 
        WHEN @period = 'month' THEN MONTH(like_date) 
        WHEN @period = 'year' THEN YEAR(like_date)
      END

SQL字段

N:B:尽管@RiggsFolly已经给出了答案。 在看到您的评论后,我感到有必要立即给出以下答案:

@MarcB,但在情况下,我需要比较列才能进行切换。 $ period不是列。 -

您可以根据@Marc B构建动态查询。请检查SQL演示以获得更好的理解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM