У меня есть небольшой запрос, он выглядит следующим образом:MYSQL GROUP_CONCAT и IN
Это немного сложнее, чем кажется, единственный вопрос, использует выход одного подзапроса в качестве параметра для пункта IN создать еще , Он работает в некоторой степени - но он дает только результаты от первого id в предложении «IN». Как ни странно, если я вручную вставляю идентификаторы записи «00003,00004,00005», это дает правильные результаты.
То, что я хочу сделать, это получить второй уровень от многих до многих отношений - в основном у тур_стопов есть предметы, которые, в свою очередь, имеют изображения. Я пытаюсь получить все изображения из всех элементов, которые будут в строке JSON, как «item_images». Как сказано, он работает быстро, но возвращает только изображения из первого связанного элемента.
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») не только дает те же результаты, которые я уже получаю, но и увеличил время запроса экспоненциально.
EDIT: Я заменил мой 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