我在查詢時遇到了一些問題。我想通過一些id來查詢一個查詢。這裏是我的查詢:在MySQL查詢中使用GROUP_CONCAT和ORDER BY FIELD的問題
此查詢不返回結果,因爲我想:(
SELECT *
FROM question q
INNER JOIN answer a ON a.question_id = q.question_id
WHERE q.lesson_id = 1
AND q.question_id IN (
SELECT e.question_id
FROM exame e
WHERE e.inscription_id = 1
AND e.lesson_id = 1
AND e.attempt = 1
ORDER BY e.question_id
) /*this subquery returns (10,2,1,8,3,12,4,11,14,7)*/
ORDER BY FIELD(q.question_id,(
SELECT GROUP_CONCAT(DISTINCT ee.question_id ORDER BY ee.order_of_appearance SEPARATOR ',') AS final_order
FROM exame ee
WHERE ee.inscription_id = 1
AND ee.lesson_id = 1
AND ee.attempt = 1)
) /*this subquery returns (10,2,1,8,3,12,4,11,14,7)*/
正如你可以看到,兩個子查詢返回相同的結果(10,2,1 ,8,3,12,4,11,14,7),正如你所知道的,它們之間的區別在於第一個返回結果集,第二個只有一個字段與所有的id連接在一起。
問題#1:如果我複製第一個子查詢並將其寫入第二個所在的位置,則出現此錯誤:
1242 - Subquery returns more than 1 row
所以我創建了第二個子查詢(帶有GROUP_CONCAT函數),但結果並不是我期待的。結果按「question_id」排序,我希望它已按「order_of_appearance」字段排序。
問題2:如果我寫ORDER裏面的子查詢BY子句中,我沒有得到的「order_of_appearance」字段排序的結果,但如果我刪除的子查詢和我手動編寫的id的陣列,結果按「order_of_appearance」排序!爲什麼???
此查詢返回結果,因爲我願意! :)
SELECT *
FROM question q
INNER JOIN answer a ON a.question_id = q.question_id
WHERE q.lesson_id = 1
AND q.question_id IN (
SELECT e.question_id
FROM exame e
WHERE e.inscription_id = 1
AND e.lesson_id = 1
AND e.attempt = 1
ORDER BY e.question_id
)
ORDER BY FIELD(q.question_id,10,2,1,8,3,12,4,11,14,7)
最後一個問題:是否可以達到我想要的東西,而無需手動編寫的id的陣列?我需要做到這一點。
提前致謝! (我希望你明白我的英語!)
格拉西亞斯@Barranka! !它被喚醒!我已經使用FIND_IN_SET()和suddenty我有我想要的結果!非常感謝!! Saludos desdeEspaña! – user3800667
@ user3800667樂於助人。 Por cierto,tambiénhay una comunidad de StackOverflow enespañol:http://es.stackoverflow.com – Barranka
gracias @Barranka! Leecharéun ojo! – user3800667