2015-04-28 5 views
-1

У меня есть 4 стола: бренды, категория, бренды_категория и файлы. бренды и категории связаны brands_category, который имеет 2 колонки: Brand_ID и CATEGORY_IDmysql select with joins and сводная таблица

## brands ## 
id | name | url | .. 

## category ## 
id | name | order | .. 

## brands_category ## 
brand_id | category_id 

## files ## 
id | name | path | brand_id | uploaded_at 

Я хочу, чтобы все различные бренды, которые имеют определенной категории и порядка по uploaded_at из таблицы файлов без дублирования брендов. Я сделал несколько попыток, но не могу получить результаты, которые я хочу. Вот самый успех у меня было:

SELECT b.*, aa.uploaded_at 
    FROM brands b 
    INNER JOIN 
    (SELECT bc.brand_id, f.uploaded_at 
       FROM  brands_category bc 
         INNER JOIN brands b 
          ON b.id = bc.brand_id 

         INNER JOIN category c 
          ON c.id = bc.category_id 
       INNER JOIN files f 
       ON f.brand_id = bc.brand_id 
       WHERE c.id = 1 
       GROUP BY bc.brand_id ORDER BY bc.brand_id DESC, f.uploaded_at DESC) aa 
     ON b.id = aa.brand_id 

Я получаю бренды в категории 1, но последняя дата uploaded_at не является возвращением, когда бренд имеет несколько файлов, связанные с ним.

+0

Вы должны опубликовать структуру таблицы, данные примеры и желаемых результатов. Как таблица 'files' относится к другим таблицам? – sgeddes

+0

извините файлы относится к брендам по столбцу brand_id в файлах таблицы – Tikaa

ответ

0

Нет необходимости в pivot столе - просто использовать стандартный joins:

select b.brand_id 
from brands b 
    join brands_category bc on b.brand_id = bc.brand_id 
    join category c on bc.category_id = c.category_id 
    join files f on b.brand_id = f.brand_id 
where c.category_name = 'Some Category' 
order by f.uploaded_at 
+0

Спасибо, что он возвращает все бренды, но не так много, так много брендов повторяются. Я также хочу выбрать f.uploaded_at для отображения на моей странице. я попытался: выберите DISTINCT b. *, f.uploaded_at от брендов b ... но не работал – Tikaa

+0

@Tikaa - на данный момент вам нужно предоставить образцы данных и желаемые результаты. Я бы подумал, что 'select different brandid, uploadedat ...' должен вернуть желаемые результаты. Если нет, вам нужно указать эти результаты. – sgeddes