Получение хорошо сформированного sql-результата с отношениями habtm - PullRequest
1 голос
/ 21 сентября 2010

Мне нужно написать SQL-запрос для csv-экспорта. У меня есть таблица "stores", "items_stores" и для этого "items". Магазины товаров HABTM. Теперь я хочу получить результат, в котором есть столбец для элементов.

Как это:

| Name       | Lat | Lng | Items         |
| Petes shop | 123 | 123 | Snacks, Pizza |
| Mama Pasta | 123 | 123 | Pasta, Pizza  |

Надеюсь, вы поняли идею. Поскольку я долгое время не использовал сырой SQL, я понятия не имею, как это сделать. Будь ты проклят ОРМ. Я думал о чем-то вроде левого соединения, а затем о конкатате или около того. Ну, без понятия в настоящее время, правда.

Для простоты предположим, что таблицы имеют следующие поля:

Stores: *id, name, lat, lng
ItemsStores: store_id, item_id
Items: *id, name

База данных - MySQL 5.x.

1 Ответ

1 голос
/ 21 сентября 2010

Предполагая, что вы используете Sql Server 2005+, я бы предложил использовать следующий запрос для получения результирующей таблицы:

select Name, Lat, Lng, stuff((select ', ' + i.name from item_store ist 
join item i on ist.itemid = i.id where ist.storeid = s.id for xml path('')), 1,2,'') [Items] from store s

Обновление.

Я не знаю, как это сделать в MySql. Но я нашел этот похожий вопрос на SO.

Мое лучшее предположение таково:

select Name, Lat, Lng, gc
from store s
join
(
select storeid, GROUP_CONCAT(name order by name) gc
from item_store ist 
join item i on ist.itemid = i.id 
where s.id = ist.storeid
group by storeid
) t on t.storeid = s.id
...