我有一點點的查詢時,它是這樣的:MYSQL GROUP_CONCAT和IN
這是稍微複雜一點比它看起來,唯一的問題是使用一個子查詢的輸出參數爲IN子句生成另一個。它在某種程度上起作用 - 但它只提供「IN」子句中第一個id的結果。奇怪的是,如果我手動插入記錄ID「00003,00004,00005」它確實給出了正確的結果。
我想要做的是獲得第二層次多對多關係 - 基本上tour_stops有項目,而這些項目又有圖像。我試圖從所有項目的所有圖像作爲'item_images'在JSON字符串中。如上所述,它運行得很快,但只返回來自第一個相關項目的圖像。
SELECT DISTINCT
tour_stops.record_id,
(SELECT
GROUP_CONCAT(item.record_id) AS in_item_ids
FROM tour_stop_item
LEFT OUTER JOIN item
ON item.record_id = tour_stop_item.item_id
WHERE tour_stop_item.tour_stops_id = tour_stops.record_id
GROUP BY tour_stops.record_id
) AS rel_items,
(SELECT
CONCAT('[ ',
GROUP_CONCAT(
CONCAT('{ \"record_id\" : \"',record_id,'\",
\"photo_credit\" : \"',photo_credit,'\" }')
)
,' ]')
FROM images
WHERE
images.attached_to IN(rel_items) AND
images.attached_table = 'item'
ORDER BY img_order ASC) AS item_images
FROM tour_stops
WHERE
tour_stops.attached_to_tour = $record_id
ORDER BY tour_stops.stop_order ASC
這兩個下面的答案我試過了,但它沒有幫助。第二個例子(將整個第一個子查詢放在他的「IN」語句中)不僅產生了我已經獲得的相同結果,而且還提高了查詢時間的指數級。
編輯:我代替我的語句
IN(SELECT item_id FROM tour_stop_item WHERE tour_stops_id = tour_stops.record_id)
和它的作品,但現在卻慘遭慢。假設我有一切正確的索引,這是做到這一點的最好方法嗎?
using group_concat in PHPMYADMIN will show the result as [BLOB - 3B]
任何見解讚賞。謝謝
這工作得很好。通過使用「獨特」索引,速度大大增加。謝謝。完全更改:SELECT GROUP_CONCAT(tour_stop_item.tour_stops_id)AS in_item_ids FROM tour_stop_item WHERE tour_stops_id = tour_stops.record_id GROUP BY tour_stops.record_id – dgig 2013-03-26 19:55:34