2013-02-02 13 views
0

** 編輯 **SELECT在確定相關行(0 - N)的數量在另一個表

我使用的第一個答案的查詢,但最終不得不修改它,因爲它不會在沒有任何會話的情況下返回多個調查。我終於摸索出此查詢:

(SELECT i.id AS id, i.title AS title, c.title AS ctitle, c.color AS ccolor, 
        i.active AS active, i.length AS length, i.redirect AS redirect, 
        COUNT(s.sid) AS number 
       FROM survey_info i 
       LEFT JOIN survey_sessions s ON s.sid = i.id 
       INNER JOIN survey_category c ON i.category = c.id 
       WHERE s.sid IS NOT NULL 
       GROUP BY s.sid) 
       UNION ALL 
       (SELECT i.id AS id, i.title AS title, c.title AS ctitle, c.color AS ccolor, 
         i.active AS active, i.length AS length, i.redirect AS redirect, 
         0 AS number 
       FROM survey_info i 
       LEFT JOIN survey_sessions s ON s.sid = i.id 
       INNER JOIN survey_category c ON i.category = c.id 
       WHERE s.sid IS NULL) 
       ORDER BY 2 

其中,解釋,注意到從下面的查詢,並返回一個有會話(已採取)ONLY調查,然後使用UNION ALL子句結合這些結果用SELECT只檢索沒有會話的調查(沒有被採納)。最後,它通過第二列(調查標題)訂購組合結果。

我希望這可以幫助別人。

-------------------------------------------- ------------------------------------------------

我一直在做一個調查程序,讓人們創建和管理調查。昨天我曾問一個問題,關於存儲結果,並意識到,我已經做了

我有一個新的表結構,現在的效果要好得多都是錯誤的(每次調查不寒而慄創建附加表),並讓我在6桌子在任何時候。 我有一個新的困境,我一整晚都在工作,希望有人能指引我走向正確的方向。

我的表是如下內容:

survey_info

id(bigint)  PK 
title(varchar) 
category(bigint) 
length(bigint) 
active(tinyint) 

survey_category

id(bigint)  PK 
title(varchar) 
color(varchar) 

survey_sessions

id    PK 
timestamp(bigint) 

我用原來以下SQL來收集調查,他們(拍攝時間)的會話數

SELECT i.id AS id, i.title AS title, c.title AS ctitle, c.color AS ccolor, 
     i.active AS active, i.length AS length, i.redirect AS redirect, 
     COUNT(s.sid) AS number 
FROM survey_info i, survey_category c, survey_sessions s 
WHERE i.category = c.id AND s.sid = i.id 
GROUP BY s.sid 

然而,正如你可能已經猜到了,這意味着每當我創建一個新的調查(這從來沒有被採納過),它不會出現在這個列表中,因爲在survey_session表中沒有它的條目。

當survey_sessions中沒有行時,是否可以使用MySQL中的條件語句來返回0來代替「COUNT(s.sid)AS號碼」?我已經閱讀了很多關於LEFT JOIN的內容,但我認爲他們不會工作,因爲沒有任何東西可以將新調查結果與survey_sessions表連接起來。

+0

是不是類似於http://stackoverflow.com/questions/3238319/how-do-i-change-all-empty-strings-to-null-in-a-table? –

回答

2

以下是您的查詢重寫爲LEFT JOINsurvey_sessions。如果它適合您,您應該能夠輕鬆檢查。

SELECT i.id AS id, i.title AS title, c.title AS ctitle, c.color AS ccolor, 
    i.active AS active, i.length AS length, i.redirect AS redirect, 
    COUNT(s.sid) AS number 
FROM survey_info i 
INNER JOIN survey_category c ON i.category = c.id 
LEFT JOIN survey_sessions s ON s.sid = i.id 
GROUP BY s.sid 
+0

這確實有效!當我允許(3分鐘)時,我會接受它作爲答案。 – SamHuckaby

+0

很酷。很高興我能幫上忙! –

相關問題