簡體   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