2012-07-12 53 views
0

UPDATE:我不想表現出重複的行輸出

下面是我的查詢:

$questionquery = " 
SELECT q.QuestionId, q.QuestionContent, o.OptionType, q.NoofAnswers, GROUP_CONCAT(an.Answer ORDER BY an.Answer SEPARATOR ' ') AS Answer, r.ReplyType, 
     q.QuestionMarks 
    FROM Answer an 
    INNER JOIN Question q ON q.AnswerId = an.AnswerId 
    JOIN Reply r ON q.ReplyId = r.ReplyId 
    JOIN Option_Table o ON q.OptionId = o.OptionId 
     WHERE ".implode(" AND ", array_fill(0, $numTerms, "q.QuestionContent LIKE ?"))." 
     GROUP BY q.QuestionId, q.SessionId, q.QuestionContent, o.OptionType, q.NoofAnswers, Answer, r.ReplyType, q.QuestionMarks 
     ORDER BY ".implode(", ", array_fill(0, $numTerms, "IF(q.QuestionContent LIKE ?, 1, 0) DESC"))." 
    "; 

上面的查詢將提供包含根據該字符串一個字符串輸出行搜索「問題」欄。

我有一個URL,你可以在我的應用程序訪問,請按照順序使用應用程序下面的步驟:

  • 第1步:當您打開應用程序時,你看到的 一個綠色的加號按鈕頁面,點擊它,它會顯示一個模式窗口。
  • 第2步:在模態窗口中有一個搜索欄,輸入「AAA」並提交搜索,你會看到一堆行出現。

現在你可以看到,如果你仔細看有一些行其重新完全相同,如在以各列中完全相同的內容(同樣的問題,答案,標記,回覆等都是一樣的號碼)

這就是我想要擺脫的。我不希望它顯示重複的行,而只是顯示其中的一行,因此它不會輸出重複的行。我需要改變什麼?

+0

user1517628,我可以建議你改述你的問題來解釋你想達到的目標嗎?該解決方案可能不涉及DISTINCT。 – 2012-07-12 17:05:22

+0

我將改寫我的問題 – user1394925 2012-07-12 17:13:01

+0

問題用例子改寫 – user1394925 2012-07-12 17:26:48

回答

0

不顯示重複的行,除非我失去了一些東西,你只需要添加DISTINCT子句,像這樣:

$questionquery = " 
SELECT DISTINCT q.QuestionId, q.QuestionContent, o.OptionType, q.NoofAnswers, 
    GROUP_CONCAT(an.Answer ORDER BY an.Answer SEPARATOR ' ') AS Answer, r.ReplyType, 
    q.QuestionMarks 
FROM Answer an 
INNER JOIN Question q ON q.AnswerId = an.AnswerId 
JOIN Reply r ON q.ReplyId = r.ReplyId 
JOIN Option_Table o ON q.OptionId = o.OptionId 
WHERE ".implode(" AND ", array_fill(0, $numTerms, "q.QuestionContent LIKE ?"))." 
GROUP BY q.QuestionId, q.SessionId, q.QuestionContent, o.OptionType, q.NoofAnswers, Answer, r.ReplyType, q.QuestionMarks 
ORDER BY ".implode(", ", array_fill(0, $numTerms, "IF(q.QuestionContent LIKE ?, 1, 0) DESC"))." 
"; 
+0

I don認爲問題ID應該是不同的壽,因爲2完全相同的行可以有不同的questionIds,我只想除了questionId的所有列都DISTINCT。這可能嗎? – user1394925 2012-07-12 18:39:03

+0

如果2行的所有列具有相同的值,並且只有QuestionId不同,則行*是不同的*,因此將使用DISTINCT子句選擇2行。請注意,DISTINCT適用於整行(元組)。換句話說,它不是不同的「列」,它是*行*。如果一切都失敗了,並且它簡化了你的理解,使用SELECT DISTINCT S1.FIELD1,S1.FIELD2,S1.FIELD3 FROM(SELECT FIELD1,FIELD2,FIELD3 ... INNER JOIN ETC)S1等子查詢,你將會確保只返回不同的行。或者,更好的主意是,將您的SELECT分成更細粒度的視圖。 – 2012-07-12 19:19:35

+1

沒關係,意識到我不需要選擇QuestionId,那就是問題所在。謝謝 – user1394925 2012-07-12 21:18:56

1

編輯:繼更改您的問題


根據您的數據。例如,它只是這個..

SELECT 
    `Question`, 
    `Answer`, 
    `Number of Marks` 
FROM 
    yourQuery 
GROUP BY 
    `Question`, 
    `Answer`, 
    `Number of Marks` 

但是,這使我懷疑有是別人告訴我們的嗎?

+0

讓我改述上面的問題,讓你知道到底發生了什麼。 – user1394925 2012-07-12 17:12:09

+0

@ user1517628 - 請還包括示例輸入和所需的輸出。 – MatBailie 2012-07-12 17:12:51

+0

問題被改寫,這是否更好? – user1394925 2012-07-12 17:26:09

0

任何特別的原因由q.SessionId回答分組?如果你通過一個你沒有選擇的字段進行分組(q.SessionID),並且通過Answer進行分組聽起來不對,因爲它是聚集函數的結果,所以我希望結果集中有重複的行。

+0

沒有理由我只是測試小組,並看到發生了什麼 – user1394925 2012-07-12 18:32:19

+0

我以前回去的GROUP BY是QuestionId和SessionId – user1394925 2012-07-12 18:39:51