Solved

Calculate a user's position in a leader board

Posted on 2008-06-18
1
254 Views
Last Modified: 2010-03-20
Hello

I have designed a league table which calculates points based on how many virtual cups of tea are given and received. 1 point for a given cup, 3 for a received.

A variable @I counts the position that the user ranks in the league, and it gives a Top 10.

How would I go about retrieving a given users position in the league, assuming most users will be outside the top ten? If a WHERE clause is used, the @I counter does not get to count the correct position in the league, and simply shows 1, as 1 record is returned.

Is a self-join needed...somehow?

Thanks!
+---------+---------------+-------------+---------------------+--------------+
| GIVE_ID | GIVE_UID_FROM | GIVE_UID_TO | GIVE_DATETIME       | GIVE_MESSAGE |
+---------+---------------+-------------+---------------------+--------------+
|       2 |     507426179 |   502129134 | 2008-05-02 17:16:44 | NULL         |
|       3 |     508580684 |   507426179 | 2008-05-02 17:21:31 | NULL         |
|       4 |     507426179 |   835984465 | 2008-05-02 17:23:39 | NULL         |
|       5 |     502129134 |   507426179 | 2008-05-02 17:23:45 | NULL         |
|       6 |     507426179 |   285100389 | 2008-05-02 17:23:46 | NULL         |
|       7 |     502129134 |   507426179 | 2008-05-02 17:24:56 | NULL         |
|       8 |     507426179 |   726170211 | 2008-05-02 17:29:14 | NULL         |
|       9 |     507426179 |   514816730 | 2008-05-02 17:29:54 | NULL         |
|      10 |     507426179 |   285100389 | 2008-05-02 17:47:33 | NULL         |
|      11 |     507426179 |   835984465 | 2008-05-02 18:00:00 | NULL         |
+---------+---------------+-------------+---------------------+--------------+
 
 
SET @I := 0;
 
 
		SELECT `GIVE_UID_FROM` , 
	
		( 	
			SELECT COUNT( * ) 
			FROM GIVE AS T 
			WHERE T.GIVE_UID_TO = SQ.GIVE_UID_FROM 
		)  	AS GIVE_TOTAL_RX,  	
	
		COUNT( `GIVE_ID` ) AS GIVE_TOTAL_TX,  	
	
		( 	
			SELECT (GIVE_TOTAL_RX *3) + COUNT( `GIVE_ID` ) 
		)  	AS GIVE_TOTAL_POINTS,
	
		@I := @I + 1 AS `GIVE_POSITION`
 
		FROM GIVE AS SQ
		GROUP BY `GIVE_UID_FROM`
		ORDER BY `GIVE_TOTAL_POINTS` DESC, `GIVE_TOTAL_RX` DESC
	LIMIT 10

Open in new window

0
Comment
Question by:matthewhamer
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
1 Comment
 

Accepted Solution

by:
matthewhamer earned 0 total points
ID: 21818609
I figured it out: Use a temporary table to store the results. Then query the temporary table.

Simply proceed the Select query with the following to generate an in-memory table which will be automatically destroyed when the connections drops. Perfect.
CREATE TEMPORARY TABLE LEAGUE ENGINE="MEMORY"

Open in new window

0

Featured Post

Use Case: Protecting a Hybrid Cloud Infrastructure

Microsoft Azure is rapidly becoming the norm in dynamic IT environments. This document describes the challenges that organizations face when protecting data in a hybrid cloud IT environment and presents a use case to demonstrate how Acronis Backup protects all data.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

When table data gets too large to manage or queries take too long to execute the solution is often to buy bigger hardware or assign more CPUs and memory resources to the machine to solve the problem. However, the best, cheapest and most effective so…
In this blog post, we’ll look at how ClickHouse performs in a general analytical workload using the star schema benchmark test.
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…
This is a high-level webinar that covers the history of enterprise open source database use. It addresses both the advantages companies see in using open source database technologies, as well as the fears and reservations they might have. In this…

617 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question