I have three tables (MySQL):
matches:
___________________________
|match_static_id| team_name |
|_______________|___________|
| 1 | Italy |
| 2 | France |
|_______________|___________|
users:
___________________________
|user_id | username |
|_______________|___________|
| 1 | Dolly |
| 2 | Didi |
|_______________|___________|
forum:
_____________________________________________________________
|match_static_id| comment | timestamp | user_id |
|_______________|___________|______________________|__________|
| 1 | Hi | 2013-07-10 12:15:03 | 2 |
| 1 | Hello | 2013-07-09 12:14:44 | 1 |
|_______________|___________|______________________|__________|
The following query is working fine (using just users,forum):
SELECT f1.match_static_id,
f2.comments_no,
f2.maxtimestamp,
users.username
FROM forum AS f1
INNER JOIN
(
SELECT match_static_id,
max(timestamp) maxtimestamp,
count(match_static_id) AS comments_no
FROM forum
GROUP BY match_static_id
) AS f2 ON f1.match_static_id = f2.match_static_id
AND f1.timestamp = f2.maxtimestamp
INNER JOIN users on users.user_id = f1.user_id
Order BY f2.maxtimestamp DESC
But when I try to query some data from the third table also with this query:
SELECT f1.match_static_id,
f2.comments_no,
f2.maxtimestamp,
users.username,
matches.team_name
FROM forum AS f1
INNER JOIN
(
SELECT match_static_id,
max(timestamp) maxtimestamp,
count(match_static_id) AS comments_no
FROM forum
GROUP BY match_static_id
) AS f2 ON f1.match_static_id = f2.match_static_id
AND f1.timestamp = f2.maxtimestamp
INNER JOIN users on users.id = f1.user_id
INNER JOIN matches on matches.match_static_id = f2.match_static_id
Order BY f2.maxtimestamp DESC
The result was duplicated (each record is duplicated) I do not why I see everything is ok so if anybody have any idea that could help me please HELP!!!
You probably don't need to do the join on the inner select statement.
SELECT
f1.match_static_id,
count(f1.comment) as comments_no,
max(timestamp) as maxtimestamp,
users.username,
matches.team_name
FROM
forum AS f1
INNER JOIN users u on u.id = f1.user_id
INNER JOIN matches m on m.static_id = f1.match_static_id
GROUP BY m.match_static_id
ORDER BY maxtimestamp DESC
i think, You want to search for last Comment, so just use group by function
GROUP BY f1.match_static_id
SQL Fiddle - would be useful
and there is no "users.id" collumn
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.