2016-10-27 2 views
4

Dies ist die Folge meiner MySQL Query Hinrichtungen ist:MySql: Initialisieren mySql Variable innerhalb einer Abfrage

Abfrage 1: SET @channel_rank = 0;

Abfrage 2:

SELECT time_of_day, @channel_rank := IF(
     @current_channel = channel, 
     1, 
     @channel_rank + 1 
    ) AS channel_rank , 
     @current_channel := channel AS channel,Views 
    FROM 
    (
    SELECT @channel_rank = 0,time_of_day,channel, SUM(Views) AS 'Views' 
     FROM access_logs_meaningful_optimized 
     WHERE `time_of_day` = 0 
     AND playing_date = '2016-10-26' GROUP BY channel 
     ORDER BY SUM(views) DESC 
     LIMIT 5 
    ) xx; 

Beispielergebnis:

time_of_day channel_rank channel    Views 
----------- ------------ --------------------- -------- 
      0    1 Tolo     1291  
      0    2 Tolo News    855  
      0    3 Samaa News    805  
      0    4 Ary Digital   695  
      0    5 Dunya News    653  

Hierher muss ich SET @channel_rank = 0; zuerst um die Variable (@channel_rank) auf 0 Meine Frage ist WIE, führen zuweisen innerhalb der query 2 kann ich vergeben die die Variable (@channel_rank) auf 0 zunächst die machen second query unabhängig von first eins.

Antwort

3

Sie müssen die Variable in der Unterabfrage nicht initialisieren. Sie können die Variable stattdessen initialisieren, indem Sie CROSS JOIN:

SELECT time_of_day, 
     @channel_rank := IF(@current_channel = channel, 1, 
          @channel_rank + 1) AS channel_rank, 
     @current_channel := channel AS channel,Views 
FROM 
(
    SELECT time_of_day,channel, SUM(Views) AS 'Views' 
    FROM access_logs_meaningful_optimized 
    WHERE `time_of_day` = 0 
    AND playing_date = '2016-10-26' 
    GROUP BY channel 
    ORDER BY SUM(views) DESC 
    LIMIT 5 
) AS xx 
CROSS JOIN (SELECT @channel_rank := 0) var 
+0

Einfach funktioniert. Vielen Dank !. In 8 Minuten annehmen :) –

Verwandte Themen