2012-10-04 3 views
-1

가능한 중복 :MySQL의 ORDER

User ID (uid) | User Name (uname) 
----------------------------------- 
1    Fallon 
2    Jeremy 
3    Matt 
4    Peter 
5    John 

나는 (테이블 users에) 5 사용자가 Fallon (uid 1) 님은 35 번까지 로그인하셨습니다 .

  • 제레미가 32 회 로그인했습니다.
  • Matt는 57 번 로그인했습니다.
  • 피터 로그인 43 회.
  • John 로그인 23 시간.
  • 로그인 정보는 다른 테이블 (logs)에 저장됩니다

    Log ID (logid) - User ID (uid) 
    

    가 지금은 대부분이 번 기록의 순서로 사용자의 목록을 표현하고 싶다. 가장 많이 로그인 한 사용자가 맨 위에 있고 두 번째로 많이 기록 된 사용자가 두 번째 사용자가됩니다. 좋아요 :

    1. Matt가 57 번 로그인했습니다.
    2. 피터 로그인 43 회.
    3. Fallon 로그인 35 회.
    4. 제레미가 32 회 로그인했습니다.
    5. John 로그인 23 시간.

    로그가 하나의 테이블에 저장되고 사용자 세부 정보가 다른 테이블에 저장되기 때문에. 어떻게하면, 어떤 쿼리를 사용해야 위와 같은 목록을 만들 수 있습니까? 도와주세요.

    답변

    3

    그것은 JOIN 관련된 단순한 쿼리 :

    SELECT users.uid, users.uname, COUNT(logs.logid) AS logins 
        FROM users 
        LEFT JOIN logs ON logs.uid=users.uid 
        GROUP BY users.uid 
        ORDER BY logins DESC 
    
    +3

    당신은 그룹 BY''놓쳤다. – bfavaretto

    +1

    @ tadman. . . 응답을 upvoted 수 있도록 그룹을 추가하십시오. 첫 번째뿐 아니라 적절한 조인 구문을 사용하는 유일한 대답입니다. –

    +0

    완료! 내가 그것을 놓쳤다는 것을 깨닫지 못했습니다. – tadman

    1
    SELECT users.uid, users.uname, COUNT(logs.logid) as logins 
        FROM users, logs 
        where logs.uid=users.uid 
        GROUP BY logs.uid 
        ORDER BY logins DESC 
    
    2

    이 안된,하지만 난이 일을한다고 생각 :

    SELECT u.`uid`, u.`uname`, COUNT(l.`logid`) AS count 
    FROM `users` AS u, `logs` AS l 
    WHERE u.`uid` = l.`uid` 
    GROUP BY l.`uid` 
    ORDER BY count DESC