2011-07-15 68 views
0

这是最新的:一个子查询,选择符合我的条件,然后按职级试图组通过用户名和排序结果选择多条记录与最大邮戳在MySQL

它没在指定日期之前的所有记录似乎没有工作寿。请注意,也可能有多个人处于同一级别。

SELECT * 
    FROM (SELECT users.userid as userid, 
       users.name as name, 
       leagues.league as league, 
       leagues.datestamp AS datestamp, 
       ranking.ranking as ranking, 
       user_profiles.profile_pic as profile_pic, 
       user_profiles.team as team 
      FROM users 
    LEFT JOIN leagues ON users.userid = leagues.userid 
    LEFT JOIN ranking ON users.userid = ranking.userid 
    LEFT JOIN user_profiles ON users.userid=user_profiles.userid 
     WHERE (leagues.datestamp <= '{$date}' 
      AND leagues.ladder = '3' 
      AND ranking.ladder = '3') 
     ORDER BY datestamp DESC) as t1 
GROUP BY userid 
ORDER BY ranking 
+1

在一个侧面说明,非常不包括围绕数字值的单引号和强制MySQL将这些字符串转换为数字的粉丝。有时候这并不符合你的期望。 –

+0

U不需要子查询中的ORDER BY datestamp DESC ... – Chandu

+0

您是否想要查找所有联赛中的最大日期戳记或每个联盟的最大日期戳记? – jtoberon

回答

1

您是否试过简单的子查询?

SELECT users.userid as userid, 
     users.name as name, 
     leagues.league as league, 
     leagues.datestamp AS datestamp, 
     ranking.ranking as ranking, 
     user_profiles.profile_pic as profile_pic, 
     user_profiles.team as team 
FROM users 
LEFT JOIN leagues ON users.userid = leagues.userid 
LEFT JOIN ranking ON users.userid = ranking.userid 
LEFT JOIN user_profiles ON users.userid=user_profiles.userid 
WHERE leagues.datestamp = (
    SELECT MAX(datestamp) 
    FROM leagues 
    WHERE leagues.ladder = '3' 
     AND leagues.datestamp <= '{$date}' 
) 
    AND leagues.ladder = '3' 
    AND ranking.ladder = '3' 
ORDER BY ranking 
+0

谢谢你的但注意到我的左连接有一个基本问题 – atomicharri