简体   繁体   English

按值更改Mysql组

[英]Change Mysql Group by value

Is it possible to change GROUP BY parameter in MySQL query? 是否可以在MySQL查询中更改GROUP BY参数? For example if user chooses period by 'week' in drop down list, to group results by week, if 'month' then by month, same with 'year'. 例如,如果用户在下拉列表中按“周”选择期间,则按周对结果分组,如果按“月”然后按月分组,则与“年”相同。 I am working with Symfony2 and getting $period variable from request 我正在使用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";

In this query I'm grouping only by date. 在此查询中,我仅按日期分组。 Is it possible to change GROUP BY parameter using CASE inside query? 是否可以在查询中使用CASE更改GROUP BY参数?

RE, your comment value of $period are: 'day', 'week', 'month', 'year' RE,您对$ period的评论值为:“天”,“周”,“月”,“年”

This may be the simplest solution 这可能是最简单的解决方案

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

Assuming $period variable contains one of these values {'day','week','month','year'} 假设$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 SQL字段

N:B: Although @RiggsFolly already gave an answer. N:B:尽管@RiggsFolly已经给出了答案。 I felt an urge to give this answer right after seeing your comment: 在看到您的评论后,我感到有必要立即给出以下答案:

@MarcB but in CASE I need to compare columns in order to switch. @MarcB,但在情况下,我需要比较列才能进行切换。 $period is not column. $ period不是列。 -

You can build dynamic query according to @Marc B. Please check the SQL demo for better understanding. 您可以根据@Marc B构建动态查询。请检查SQL演示以获得更好的理解。

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

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