2013-07-02 3 views
1

У меня есть эти две таблицы:порядок MySQL другими таблицами грести

Таблица А:
--- ID --- Name ---
Таблица б:
--- ID --- ID_of_a --- Date ---

Теперь я хочу заказать ряды table a от Date (desc) от table b от самой новой даты. Пример: Table a имеет строки с идентификаторами «1» и «2».
Table b имеет следующие строки: {ID, ID_of_a, Date} {1, 1, "2013-06-30"}, {2, 1, "2013-07-01"}, {3, 2, "2013 -07-02" }
правильный порядок идентификаторов из таблицы А было бы: 1 --- 2
Запрос:

SELECT DISTINCT a.ID, a.Name FROM a, b WHERE a.ID=b.ID_of_a ORDER BY b.Date desc 


Но это не работает иногда.

+0

Что не работает в разы? –

+0

Какой запрос вы используете, что «иногда не работает» – RedBaron

+0

О, извините. Я об этом забыл. - Отредактировано –

ответ

2

Предполагая, что существует 1-1 связь между таблицами:

select a.* 
from a left outer join 
    b 
    on a.id = b.id 
order by b.date desc 

Если есть несколько строк в b для каждого a, то вам нужно group by:

select a.* 
from a left outer join 
    b 
    on a.id = b.id 
group by a.id 
order by max(b.date) desc 
+0

работал, спасибо! –

0

Как насчет

select a.name,a.id from a join (select id_of_a as id_a,max(dt) as max_dt from b group by id_of_a order by max_dt desc) e on e.id_a=a.id 

Пример

mysql> select * from a; 
+----+------+ 
| id | name | 
+----+------+ 
| 1 | a | 
| 2 | b | 
+----+------+ 
2 rows in set (0.00 sec) 

mysql> select * from b; 
+----+---------+------------+ 
| id | id_of_a | dt   | 
+----+---------+------------+ 
| 1 |  1 | 2013-06-20 | 
| 2 |  2 | 2013-07-01 | 
| 3 |  1 | 2013-07-02 | 
+----+---------+------------+ 
3 rows in set (0.00 sec) 

mysql> select a.name,a.id from a join (select id_of_a as id_a,max(dt) as max_dt from b group by id_of_a order by max_dt desc) e on e.id_a=a.id; 
+------+----+ 
| name | id | 
+------+----+ 
| a | 1 | 
| b | 2 | 
+------+----+ 
2 rows in set (0.00 sec) 

В основном вы сначала выбрать максимальную дату для каждого id_of_a, а затем присоединить его к a

Я думаю, что это может быть переписана, чтобы работать более эффективно

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