2013-05-14 62 views
0

我有以下代码,并且我想根据他的总余额仅获得用户的联盟排名。我怎样才能做到这一点?如何获得使用MySQL的MySQL查询排名

// Set League Rank by User 
global $post; 
$post_author = $post->post_author; 
$post_status = 'publish'; 
$meta_key = 'balance'; 
$rank = $wpdb->get_var($wpdb->prepare(
    " 
    SELECT *, @rownum := @rownum + 1 from 
    (
    SELECT 
     SUM(meta_value) as balance, 
    FROM {$wpdb->postmeta} pm 
    INNER JOIN {$wpdb->posts} p ON pm.post_id = p.ID 
    JOIN (SELECT @curRow := 0) r; 
    WHERE pm.meta_key = %s AND p.post_author = %s AND p.post_status = %s 
    order by balance desc)x, (SELECT @rownum := 0) r 
    ", 
    $meta_key, $post_author, $post_status 
    )); 

可以帮助我吗?

谢谢。

+0

你可以发布有问题的两个表的表定义吗? – Orangepill 2013-05-14 15:08:53

+0

你在哪里设置$ meta_key – Anigel 2013-05-14 15:14:05

+0

这段代码很适合检索每个用户的余额。我需要的是获得排名,这是表中不存在的列。 – qebas 2013-05-14 15:15:02

回答

0

尝试类似的东西:

SELECT 
    ROUND (SUM(meta_value),2) as balance, 
    @curRow := @curRow + 1 AS rank 
FROM {$wpdb->postmeta} pm 
INNER JOIN {$wpdb->posts} p ON pm.post_id = p.ID 
JOIN (SELECT @curRow := 0) r; 
WHERE pm.meta_key = %s AND p.post_author = %s AND p.post_status = %s 
order by balance desc 

我可能误会你是什么意思等级,所以如果这不起作用,请进一步说明正是你所需要的。

+0

谢谢你的回复,不幸的是我试了一下,它不起作用。我的意思是一个排名最高的用户排名第一的排名表,依此类推。余额排序每个用户的等级。 – qebas 2013-05-14 15:27:28

+0

我已经更新了上面的代码,看看能否更好地说明我需要什么。 – qebas 2013-05-14 15:42:07