是否可以在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参数?
答案 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
N:B:虽然@RiggsFolly已经给出了答案。在看到你的评论后,我立刻想要给出这个答案:
@MarcB但在CASE中我需要比较列才能切换。 $ period不是列。 -
您可以根据@Marc B构建动态查询。请查看SQL演示以便更好地理解。