Я использую PHP и MySQL. У меня есть таблицы:
categories
id | category |
1 | Fujifilm
2 | Sony
3 | Nikon
listings
id | title |Condition_id | cat_id
1 | Fujifilm XE-1 | 1 | 1
2 | Fujifilm XE-1 | 1 | 1
3 | Fujifilm XE-1 | 2 | 1
4 | Fujifilm X70 | 1 | 1
Conditions
id | condition
1 | New
2 | Used
Если кто-то ищет Fujifilm, мне нужно вернуться:
2 Results found:
Fujifilm XE-1 (2 new available, 1 used available)
Fujifilm X70 (1 new available)
Можно ли это сделать в одном запросе?
Пока у меня есть:
SELECT
listings.title,
con.condition
FROM listings
JOIN conditions con ON listing.condition_id = con.id
JOIN categories cat ON cat.id = listings.cat_id
WHERE listings.cat.id = 1
Если я группирую по названию, условия объединяются.
Использовать GROUP_CONCAT
SELECT title,
GROUP_CONCAT(CONCAT_WS(' ', total_count, 'condition', 'available')) AS Result
FROM
(
SELECT
listings.title,
con.condition,
COUNT(*) total_count
FROM listings
JOIN conditions con ON listings.condition_id = con.id
JOIN categories cat ON cat.id = listings.cat_id
WHERE listings.cat_id = 1
GROUP BY listings.title, con.condition
) a
GROUP BY title
Вот демо.