2014-08-29 48 views
0

我已經制作了一個已投入使用的投票腳本,但我想練習一些MySQL,嘗試通過SQL查詢對結果進行排序/篩選,而不是獲取整個表作爲一個數組並且使用循環進行處理。ORDER BY來自不同表的相同選項ID的行數

我遇到了一個根據投票次數排序投票選項的問題。我的數據庫有3個與此相關的腳本表:

  • vote_votes - 其中包含了投票,每票一排鑄
  • vote_options - 其中包含的每一票
  • vote_list可能的選項 - 其中包含了與標題票的名單,類型等

我原來的劇本剛剛得到所有匹配使用

當前訪問的投票的ID選項
SELECT * FROM vote_options WHERE vote_options.vid = $voteID 

然後對與數組中vote_votes內選項的唯一ID匹配的行進行計數,然後根據具有自定義排序功能的行數進行排序。

我想在一個查詢,我認爲這是可能的,我只是不知道如何。這是我目前的SELECT聲明:

SELECT 
    options.optid as id, 
    options.value as value 
FROM vote_options options 
WHERE vid = {$vote['vid']};"); 

基本上,裏面vote_votes,每個條目都有一個唯一的entryidoptid列,我想將它添加到查詢的方式,這些條目都算作WHERE vote_votes.optid = options.optid(選項ID是唯一的,所以不需要查找投票ID)。

我當時希望這能行,但顯然是錯誤的。這是我放棄並在此問問題之前最接近的。

SELECT 
    options.optid as id, 
    options.value as value 
FROM vote_options options 
WHERE vid = {$vote['vid']} 
ORDER BY (
    SELECT COUNT(*) 
    FROM vote_votes 
    WHERE vote_votes.optid = options.optid 
) DESC; 
+0

它'不清楚你想要什麼,但也許'ORDER BY CASE WHEN vote_options.field = somevalue AND vote_otions.someotherfiled = ithasthisoption THEN..' – Mihai 2014-08-30 00:04:13

回答

0

我已經找到了解決方案,它只是一個括號移動SELECT到正確的地方的事情:

SELECT 
    options.optid as id, 
    options.value as value, 
    options.vid as voteid, 
    (
     SELECT COUNT(*) 
     FROM vote_votes votes 
     WHERE votes.optid = options.optid 
    ) as votes 
FROM vote_options options 
WHERE options.vid = {$vote['vid']} 
ORDER BY votes DESC; 
相關問題