![](/img/trans.png)
[英]How to get a list that order by username if it have score in score table?
[英]Order table numerically and get the list number
在我的WordPress網站中,我有自定義用戶元數據reputation
。 該值為數字,與Stackoverflow中的點/信號使用方式類似。
我想get
其中的用戶行列,其他人的數量。
瀏覽數據庫,我需要做的就是按降序列出表格,我可以看到誰排名為1(最多點)等等......
有什么辦法可以向用戶顯示排名嗎? 我猜最好的方法是按降序排序表,並以某種方式獲取用戶在該列表中的位置數量?
我想獲取用戶的排名。 與下面的函數類似,獲取用戶的總評論數。 我需要user_id作為參數:
function get_user_comments_count( $uid ){
global $wpdb;
$where = 'WHERE comment_approved = 1 AND user_id = ' . $uid ;
$comment_count = $wpdb->get_var("SELECT COUNT( * ) AS total
FROM {$wpdb->comments}
{$where}");
return $comment_count;
}
您可以使用連接作為用戶表和元數據,並按列中存儲的meta_value進行排序,
SELECT u.*
FROM `wp_users` u
JOIN `wp_usermeta` um ON(u.ID = um.`user_id`)
WHERE um.`meta_key` = 'reputation'
ORDER BY um.`meta_value` * 1 DESC
按順序使用* 1
是一個簡單的轉換技巧到整數,desc將按用戶的信譽評分列出用戶,這樣就會首先列出信譽較高的用戶,依此類推
global $wpdb;
$query=" SELECT u.*,um.`meta_value` as `rank`
FROM $wpdb->users u
JOIN $wpdb->usermeta um ON(u.ID = um.`user_id`)
WHERE um.`meta_key` = 'reputation'
ORDER BY um.`meta_value` * 1 DESC";
$results = $wpdb->get_results($query, OBJECT );
循環搜索結果
foreach($results as $r){
echo $r->rank; // rank of user
}
從評論中編輯
這是你的功能
function getReputationByUser($user_id){
if(!is_numeric($user_id)){
return false;
}
global $wpdb;
$query=" SELECT um.`meta_value` as `rank`
FROM $wpdb->usermeta um
WHERE um.`meta_key` = 'reputation'
AND um.user_id = '".$user_id."'
";
$result = $wpdb->get_row($query);
if(!empty($result)){
return $result->rank;
}
return false;
}
echo getReputationByUser(100);
上面的代碼用於返回聲譽,如果你想要基於聲譽的用戶等級你可以通過下面的查詢得到這個,但我不確定你是否可以在WPDB
類中使用@variables
of Mysql
SELECT t1.`rank`
FROM(
SELECT
um.user_id,
@rownum:= @rownum + 1 `rank`
FROM
wp_usermeta um
CROSS JOIN (SELECT @rownum := 0) t
WHERE um.`meta_key` = 'reputation'
ORDER BY um.`meta_value` * 1 DESC
) t1
WHERE t1.user_id = 100
上述查詢的功能
function getReputationByUser($user_id){
if(!is_numeric($user_id)){
return false;
}
global $wpdb;
$query=" SELECT t1.`rank`
FROM(
SELECT
um.user_id,
@rownum:= @rownum + 1 `rank`
FROM
$wpdb->usermeta um
CROSS JOIN (SELECT @rownum := 0) t
WHERE um.`meta_key` = 'reputation'
ORDER BY um.`meta_value` * 1 DESC
) t1
WHERE t1.user_id = '".$user_id."'";
$result = $wpdb->get_row($query);
if(!empty($result)){
return $result->rank;
}
return false;
}
echo getReputationByUser(100);
這是使用group_concat
和find_in_set
函數查找用戶排名的另一種方法
SELECT user_id,FIND_IN_SET(
user_id,(SELECT GROUP_CONCAT( user_id ORDER BY meta_value * 1 DESC)
FROM `wp_usermeta`
WHERE meta_key ='reputation')
) AS rank
FROM wp_usermeta
WHERE meta_key ='reputation'
AND user_id = 100
function getReputationByUser($user_id){
if(!is_numeric($user_id)){
return false;
}
global $wpdb;
$query="SELECT user_id,FIND_IN_SET(
user_id,(SELECT GROUP_CONCAT( user_id ORDER BY meta_value * 1 DESC)
FROM $wpdb->usermeta
WHERE meta_key ='reputation')
) AS rank
FROM $wpdb->usermeta
WHERE meta_key ='reputation'
AND user_id = '".$user_id."'
";
$result = $wpdb->get_row($query);
if(!empty($result)){
return $result->rank;
}
return false;
}
echo getReputationByUser(100);
根據文檔結果被截斷為group_concat_max_len系統變量給出的最大長度,該變量的默認值為1024.盡管返回值的有效最大長度受到值的約束,但該值可以設置得更高。 max_allowed_packet的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.