2011-03-06 9 views
0

Mysql 쿼리에 집착 했습니까? |순서가있는 여러 테이블에서 Distinct를 선택하십시오.

사용자

ID :

나는 두 개의 테이블이 이름
1 | foo1
2 | foo2
3 | foo3

게시물

id | id_user | created_at | 종류
1 | 2 | 15-03-2011 | a
1 | 2 | 14-03-2011 | b
2 | 3 | 13-03-2011 | a
1 | 2 | 12-03-2011 | b

내가 원하는 것은 만든 날짜순으로 정렬 된 각 사용자의 최신 게시물 (종류는 중요하지 않음)을 검색하는 것입니다.

어떻게하면됩니까?

당신에게 id_user에 GROUP BY 및 최대 포스트 날짜를 사용하여 사람

답변

0

한 가지 가능한 쿼리는이 :

SELECT 
u.id, 
(SELECT MAX(p.created_at) FROM posts AS p WHERE u.id = p.id_user) AS latest 
FROM 
user AS u; 

종속 하위 쿼리는이에 대한 최고의 솔루션이 아닐 수도있다. 예 출력 : 모든 사용자 ID를 통해 최신 게시물의 정렬 된 목록을하고자하는 경우 또한 쿼리의 마지막에 최신 DESC에 의해 주문을 추가 할 수 있습니다

users: 

+------+------+ 
| id | name | 
+------+------+ 
| 0 | test | 
| 1 | one | 
+------+------+ 

posts: 

+------+---------+------------+------+ 
| id | id_user | created_at | kind | 
+------+---------+------------+------+ 
| 0 |  0 | 2011-02-05 | a | 
| 1 |  1 | 2011-02-06 | b | 
| 2 |  0 | 2011-02-03 | a | 
| 3 |  1 | 2011-02-02 | b | 
+------+---------+------------+------+ 

output: 

+------+------------+ 
| id | latest  | 
+------+------------+ 
| 0 | 2011-02-05 | 
| 1 | 2011-02-06 | 
+------+------------+ 

.

+0

입니다. 대단히 감사합니다. 너희들이 다시 해냈어! – LuisClemente

0

감사? 그런

뭔가 :

SELECT u.name, p.id_user, MAX(p.created_at) 
FROM posts AS p 
LEFT JOIN user AS u ON u.id 
WHERE p.id_user = u.id 
GROUP BY id_user 
+0

여기서 추가 할 것은 3 (MAX() 열에 대한 서수) – DRapp

관련 문제