按值更改Mysql组

时间:2016-02-22 14:52:57

标签: php mysql symfony

是否可以在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参数?

2 个答案:

答案 0 :(得分:1)

RE,您的评论 $ period的值是:' day',' week',' month',' year&#39 ;

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

$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";

答案 1 :(得分:0)

假设$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 FIDDLE

N:B:虽然@RiggsFolly已经给出了答案。在看到你的评论后,我立刻想要给出这个答案:

  

@MarcB但在CASE中我需要比较列才能切换。   $ period不是列。 -

您可以根据@Marc B构建动态查询。请查看SQL演示以便更好地理解。