Здесь довольно простой вопрос SQL - у меня есть три уровня данных, распределенных по трем таблицам. Таблица 1 – Списки, Таблица 2 – Интересы, Таблица 3 – Сообщения
Таблица 1 -> Таблица 2 и Таблица 2 -> Таблица 3 имеют отношение «один ко многим».
Объявления будут всегда, но для каждого объявления могут быть или не быть интересы, а также могут быть или не быть сообщения для каждого интереса.
Я хочу выбрать всю информацию в 1 Select Statement, чтобы избежать множественных вызовов базы данных.
Я знаю, что с двумя уровнями информации вы можете использовать GROUP_CONCAT и GROUP BY, чтобы получить всю информацию второго уровня в объединенный строковый столбец. Я просто не знаю, что делать с тремя уровнями, если я хочу использовать только один выбор. Я также знаю, как это можно сделать с помощью двух отдельных вызовов и скрипта PHP/python между ними, но я хочу избежать этого для повышения производительности.
В идеале я бы вернул массив, который выглядит так:
array(
'1'=>array(listingId'=>1,
interests=>
array(
array(
'interestId'=>2
'messages'=>array(
'messageId'=>5,
'message'=>'hi'
),
...
),
...
),
...
),
...
)
Другой идеальной ситуацией было бы получить:
array(
'1'=>array(listingId'=>1,
interests=>
array(
array('interestId'=>2,
'messages'=>INSERT CONCATENATED STRING HERE
),
...
),
...
),
...
)
В этой ситуации я мог бы просто использовать скрипт PHP/Python/Ruby для анализа объединенной строки сообщения.
Точки представляют больше массивов с похожими данными.
Самая серьезная проблема с попыткой использовать конкатенацию заключается в том, что вы можете вернуть только один столбец с помощью подвыборки.
Заранее спасибо! :)