сортировать sql запрос по значениям в другой таблице - PullRequest
1 голос
/ 31 марта 2011

Я запрашиваю таблицу с именем исполнителей, но я бы хотел отсортировать ответ по таблице с именем живописи (художник has_many раскрашивает - таблица живописи имеет столбец artist_id).

Чтобы быть более точным, я хочу отсортировать художников по их последней картине (картины имеют столбец с именем date_created). Кто-нибудь знает, как это можно сделать?

Ответы [ 5 ]

3 голосов
/ 31 марта 2011

В идеале это должно быть сделано с помощью соединений ANSI:

SELECT DISTINCT a.artist
FROM            artists a
     INNER JOIN paintings p
     ON         a.artistID = p.artistID
ORDER BY        p.date_created desc
2 голосов
/ 31 марта 2011

Возможно, что-то вроде этого, в зависимости от особенностей вашей схемы?

SELECT DISTINCT artists.* FROM
artists, paintings
WHERE artists.id = paintings.artist_id
ORDER BY paintings.painting_date DESC;

Это объединит две таблицы по идентификатору художника, а затем упорядочит по датам их рисования.DISTINCT гарантирует, что вы получите только один ряд на исполнителя.

1 голос
/ 31 марта 2011

Это вернет каждого артиста только один раз, с последним значением date_created для этого артиста.

SELECT artists.name, paintings.date_created
FROM artists JOIN (
    SELECT artist_id, MAX(date_created) as date_created FROM paintings GROUP BY artist_id
) paintings ON artists.id = paintings.artist_id
ORDER BY paintings.date_created DESC
0 голосов
/ 31 марта 2011

Вы можете создать запрос:

         select artistid, max(paintingdate)
         from paintings
         group by artistid

и затем присоединиться к нему в виде встроенного представления:

       select artistname from artist
       inner join
       ( 
         select artistid, max(paintingdate) as latestdate
         from paintings
         group by artistid
        ) as Foo
        on artist.artistid = Foo.artistid
        order by latestdate desc
0 голосов
/ 31 марта 2011

Если я правильно понимаю ваше требование:

1) Напишите запрос агрегации, который возвращает каждого художника и его / ее последнюю картину;2) Используйте его как подзапрос, присоединяя его к таблице художников;3) ВЫБЕРИТЕ столбцы из объединения, упорядочив по дате последней покраски.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...