2016-01-29 5 views
2

У меня есть три таблицы, а также дубликаты имен столбцов :) Я хочу присоединиться к альбомам к продуктам и изображениям в альбомы. Изображений много. Попытка такого запроса дает мне дубликаты продуктов. Есть ли шанс захватить все в одном запросе?Получить записи из третьей таблицы

 SELECT 
     *, p.name as nazwa, a.name as nazwa_al, i.name as obrazek 
     FROM products p 
     JOIN 
     albums a on p.album_id=a.id 
     JOIN 
      (SELECT *, images.name AS nazwa_im FROM images ORDER BY images.order ASC) i 
     ON i.album_id=a.id 
     ORDER BY p.order ASC 

Продукты

+-------------+---------+------+-----+---------+----------------+ 
| Field  | Type | Null | Key | Default | Extra   | 
+-------------+---------+------+-----+---------+----------------+ 
| id   | int(11) | NO | PRI | NULL | auto_increment | 
| name  | text | NO |  | NULL |    | 
| description | text | NO |  | NULL |    | 
| album_id | int(11) | YES |  | NULL |    | 
| order  | int(11) | NO |  | NULL |    | 
+-------------+---------+------+-----+---------+----------------+ 

Альбомы

+-------+---------+------+-----+---------+----------------+ 
| Field | Type | Null | Key | Default | Extra   | 
+-------+---------+------+-----+---------+----------------+ 
| id | int(11) | NO | PRI | NULL | auto_increment | 
| name | text | NO |  | NULL |    | 
+-------+---------+------+-----+---------+----------------+ 

Изображения

+----------+---------+------+-----+---------+----------------+ 
| Field | Type | Null | Key | Default | Extra   | 
+----------+---------+------+-----+---------+----------------+ 
| id  | int(11) | NO | PRI | NULL | auto_increment | 
| name  | text | NO |  | NULL |    | 
| alt  | text | NO |  | NULL |    | 
| album_id | int(11) | NO |  | NULL |    | 
| order | int(11) | NO |  | NULL |    | 
+----------+---------+------+-----+---------+----------------+ 

Для простоты я не хочу изменять структуру db. Самое легкое решение для меня было бы: один продукт => один альбом => много изображений

ответ

2

Используйте соединения и используйте псевдонимы, чтобы решить проблему с повторяющимся именем.

Вы можете использовать distint или группу, чтобы результаты были выровнены по одному и тому же идентификатору продукта.

SELECT 
*, p.name as nazwa, a.name as nazwa_al, i.name as obrazek 
FROM 
products p 
JOIN 
albums a on p.album_id = a.id 
JOIN 
images i ON i.album_id = a.id 
GROUP BY p.id 
ORDER BY p.order ASC 

Вы должны использовать group_concat, если несколько строк на правой стороне.

SELECT 
*, p.name as nazwa, a.name as nazwa_al, group_concat(i.name) as obrazek 
FROM 
products p 
JOIN 
albums a on p.album_id = a.id 
JOIN 
images i ON i.album_id = a.id 
GROUP BY p.id 
ORDER BY p.order ASC 
+0

спасибо. Это дало мне синтаксическую ошибку, мне пришлось перемещать группу до заказа, и теперь она также дала мне только одно изображение «образек» - это i.name – cssBlaster21895

+0

Забыл. Не проверенный запрос. Обновленный запрос. Помогает ли это? или нужна помощь? –

+0

Мне нужно много изображений :) – cssBlaster21895

Смежные вопросы