2012-03-26 69 views
1

我在嘗試創建一個從數據庫中選擇輪播的過程。最終返回所選廣告行並增加視圖值。MYSQL:在多行中選擇使用COUNT和SUM函數的問題

我目前工作的一部分應該從「廣告」表,其中「城市」給定的城市和「點」給定的地點名稱相符程度

  1. 牽引結果。
  2. 添加枚舉結果行的附加「num」列。
  3. 從這些結果中,選擇了「NUM」列匹配SUM行(「若干意見」)%COUNT(ID)

這應該允許,只要我增加了我來顯示旋轉廣告當廣告最終選擇的觀點列,並返回

我目前工作的代碼是....

SET @t1=-1; 

SELECT * 
    FROM (SELECT @t1 := @t1+1 AS num, ads.* 
      FROM ads 
     WHERE city = 'Maitland' 
      AND spot = 'home-banner' 
     ORDER BY id ASC) dt 
WHERE dt.num = SUM(dt.views) % COUNT(dt.id); 

...不過我有和與計數功能的問題。我無法使用組功能錯誤。我也嘗試將函數移動到子查詢中,但由於某些原因,這會導致子查詢僅返回一個結果。子查詢

num id spot city views 
0 1 home-banner Maitland 0 
1 2 home-banner Maitland 2 
2 3 home-banner Maitland 0 
3 4 home-banner Maitland 0 
4 5 home-banner Maitland 0 
5 6 home-banner Maitland 0 

回答

1

結果試試這個:

SELECT * FROM (
    SELECT @t1 := @t1 + 1 AS num, ads.* 
    FROM ads, (SELECT @t1 := -1) init 
    WHERE city = 'Maitland' AND spot = 'home-banner' 
    ORDER BY id ASC 
) dt 
WHERE dt.num = (
    SELECT SUM(views) % COUNT(id) FROM ads 
    WHERE city = 'Maitland' AND spot = 'home-banner') 
+0

謝謝,但不會這個計算的看法模量和計算整個廣告表,子查詢的不結果?我只關心匹配城市和現場的結果。我想我可以重複WHERE子句,但是這不是明智的雙重性能表現嗎? – christian 2012-03-26 01:29:14

+0

你說得對,我錯過了WHERE子句。是的,這將需要更長的時間,但這是我能想到的唯一方法:(你也可以創建一個臨時表並存儲所有當前的城市和現場數據,然後查詢該表以獲得'sum'和'count' – 2012-03-26 01:38:18

+1

好的,希望在實踐中不會太差,感謝臨時表的建議,也許這將是一條更好的路線。最終,我將爲同一個城市拉動多個廣告位(10個左右)。 – christian 2012-03-26 01:41:49