Проблема с несколькими столами - PullRequest
1 голос
/ 24 августа 2011

Во-первых, вы должны знать, что я отстой в SQL.

Вот моя проблема:

У меня есть 4 таблицы, к которым нужно присоединиться (для использования в SphinxSearch),вот приблизительная структура:

Счета

Id Name Category
----------------
1  Test 1
2  Foo  2
3  Bar  1

Категория

Id Name
-------
1  Restaurants
2  Store

Счета_as_subcategory

account_id subcat_id
--------------------
1          1
1          3
2          2

Подкатегория

Id Name
-------
1  Chinese
2  Sportswear
3  Delivery

То, что я хочу, - это набор результатов, который выглядит следующим образом:

accounts.id | accounts.name | category_name | subcategories
-----------------------------------------------------------
1             Test            Restaurants     Chinese, Delivery
2             Foo             Store           Sportswear

Правильно, мой запрос выглядит так:

SELECT a.id, a.name, c.name as category, group_concat(subcat.name) as subcategories
FROM accounts AS a
JOIN (account_has_subcategory AS ahs, subcategory AS subcat)
ON (a.id = ahs.account_id AND ahs.subcat_id = subcat.id),
accounts AS a2
JOIN category AS c
ON a2.category = c.id

Как уже было сказано, я сосу на SQL (как только онвключает в себя несколько соединений или тому подобное в принципе ...).Если бы кто-то мог указать мне правильное направление или предложить решение (с базовым объяснением, чтобы я мог попытаться получить это в своем мозгу -_-), это сделало бы мой день, так как я боролся с этим запросом в течение хороших 5 часовсейчас ...

Спасибо.

Ответы [ 2 ]

2 голосов
/ 24 августа 2011

Вы почти на месте - вам просто нужно немного исправить свой синтаксис и добавить группу.

select a.id, a.name, c.name as category, group_concat(subcat.name) as subcategories
from accounts as a
inner join category as c on a.category = c.id
inner join accounts_has_subcategory as ahs on a.id = ahs.account_id
inner join subcategory as subcat on ahs.subcat_id = subcat.id
group by a.id, a.name, c.name
2 голосов
/ 24 августа 2011

Попробуйте это?

SELECT a.id, a.name, 
       c.name as category, 
       group_concat(subcat.name) as subcategories
FROM accounts AS a
INNER JOIN account_has_subcategory AS ahs ON a.id = ahs.account_id
INNER JOIN subcategory AS subcat ON subcat.id = ahs.subcat_id
INNER JOIN category AS c ON a.category = c.id
GROUP BY a.id, a.name, c.name
ORDER BY a.id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...