$ wpdb按计数获取计数和排序

时间:2014-08-11 10:30:31

标签: sql wordpress count

我正在尝试创建前3名人员的排行榜,这些人已经输入数据库,这将是我的WordPress插件的一部分。

这是表架构。

id    |    name    |    code

1          sam          456
2          craig        567
3          sam          456
4          sam          456
5          liam         321
6          liam         321
7          sam          456

我需要的是找出谁将最多的条目输入数据库并按最高顺序排序以创建排行榜。因此,使用上述数据,电路板将如下所示:

position    |    name    |    entries

   1             sam            4
   2             liam           2
   3             craig          1

目前,我有这段代码:

global $wpdb;
$ck_af = $wpdb->get_results( $wpdb->prepare("SELECT name FROM wp_entry_log GROUP BY name ORDER BY count(*) DESC LIMIT 3")); 

$i = 1;
foreach($ck_af as $result) {
  echo "<tr><td> " . $result->name . "</td></tr>";
  $i++;
}

将结果输出为:

sam
liam
craig

但我似乎无法获得存储的次数,因此我可以显示条目。

有人可以帮我显示每个条目在数据库中的次数,同时按照目前的顺序对它们进行排序和分组吗?

2 个答案:

答案 0 :(得分:1)

您需要在查询中返回COUNT

尝试以下方法:

global $wpdb;
$ck_af = $wpdb->get_results( $wpdb->prepare("SELECT name, COUNT(*) as `counter` FROM wp_entry_log GROUP BY name ORDER BY count(*) DESC LIMIT 3")); 

$i = 1;
foreach($ck_af as $result) {
  echo "<tr><td> " . $result->name . "</td><td> " . $result->counter. "</td></tr>";
  $i++;
}

答案 1 :(得分:0)

试试这个:

global $wpdb;
$ck_af = $wpdb->get_results( $wpdb->prepare("SELECT rank() over (ORDER BY name) position, name, COUNT(*) as `counter` FROM wp_entry_log GROUP BY name ORDER BY count(*) DESC LIMIT 3")); 

$i = 1;
foreach($ck_af as $result) {
  echo "<tr><td> " . $result->name . "</td><td> " . $result->counter. "</td></tr>";
  $i++;
}