나는 포럼을 만들고 있는데, 주어진 포럼에 대한 모든 주제를 표시하는 페이지를 만드는 데 어려움을 겪고 있습니다. & 필드로 구성되어 세 개의 관련 테이블은 다음과 같습니다어느 정도 복잡한 MySQL 문
Table: forums_topics Table: forums_posts Table: users
-------------------- ------------------- ------------
int id int id int id
int forum_id int topic_id varchar name
int creator int poster
tinyint sticky varchar subject
timestamp posted_on
나는 다음과 같은 SQL을 시작했습니다
이 내가 원하는 걸 얻고있는 것으로 보인다SELECT t.id,
t.sticky,
u.name AS creator,
p.subject,
COUNT(p.id) AS posts,
MAX(p.posted_on) AS last_post
FROM forums_topics AS t
JOIN users AS u
LEFT JOIN forums_posts AS p ON p.topic_id = t.id
WHERE t.forum_id = 1
AND u.id = t.creator
GROUP BY t.id
ORDER BY t.sticky
(항목의 ID 번호, 경우의 주제를 만든 사람, 끈적 끈적한 주제, 주제의 제목, 각 주제의 게시물 수 및 최신 게시물의 시간 소인). 실수가 있으면 알려주세요.
내가 지금 문제가되는 것은 가장 최근의 포스터의 이름을 얻는 방법입니다. 누군가 내 SQL을 편집하여 어떻게 그렇게되는지 설명 할 수 있습니까? 필요하다면 더 많은 정보를 제공 할 수 있습니다. 테이블을 재구성하면 간단해질 수 있습니다.
SELECT t.id,
t.sticky,
u.name AS creator,
p.subject,
COUNT(p.id) AS posts,
MAX(p.posted_on) AS last_post,
(SELECT name FROM users
JOIN forums_posts ON forums_posts.poster = users.id
WHERE forums_posts.id = MAX(p.id)) AS LastPoster
FROM forums_topics AS t
JOIN users AS u
LEFT JOIN forums_posts AS p ON p.topic_id = t.id
WHERE t.forum_id = 1
AND u.id = t.creator
GROUP BY t.id
ORDER BY t.sticky
는 기본적으로, 당신은 최대 ID를 기반으로 사용자를 찾을 하위 쿼리를 수행
트릭을하는 것처럼 보입니다. 대단히 감사합니다! 여기를 두드리는 동안 나는 같은 테이블을 두 번 결합하는 것에 흥미로운 것을 발견했습니다. 이것은 작동하므로 계속 사용하겠습니다.하지만 다시 돌아와 어쩌면 내가 subselect없이 끝낼 수 있는지 알아보기 위해 메모를 작성하겠습니다. – Geomancer