[英]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
N:B:尽管@RiggsFolly已经给出了答案。 在看到您的评论后,我感到有必要立即给出以下答案:
@MarcB,但在情况下,我需要比较列才能进行切换。 $ period不是列。 -
您可以根据@Marc B构建动态查询。请检查SQL演示以获得更好的理解。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.