Php 列字段中的数据库SQL按值排序

Php 列字段中的数据库SQL按值排序,php,mysql,sql,wordpress,Php,Mysql,Sql,Wordpress,我有一个WordPress博客,显然有一个WordPress数据库 数据库名称:wordpress 通信的两个表是wp\u users和wp\u usermeta 表usermeta有user\u id、meta\u key和meta\u value列 user_id meta_key usermeta 1 name mark 1 userurl mark.com 1 point

我有一个WordPress博客,显然有一个WordPress数据库

数据库名称:
wordpress

通信的两个表是
wp\u users
wp\u usermeta

usermeta
user\u id
meta\u key
meta\u value

user_id   meta_key          usermeta

1         name              mark
1         userurl           mark.com
1         points            8

2         name              luke
2         userurl           luke.com
2         points            4

2         name              frank
2         userurl           frank.com
2         points            6
我会在特定页面上显示数据,如下所示,并按points value desc排序:

Name: Mark
User Blog: mark.com
points: 8

Name: Frank
User Blog: mark.com
points: 6

Name: Luke
User Blog: luke.com
points: 4
我使用了这样的代码,但显然不起作用:

$sql =
    "SELECT user_id, meta_key, meta_value" .
    " FROM wp_usermeta" .
    " WHERE meta_key IN ('name','userurl','points')" .
    " ORDER BY meta_value DESC";

$usermeta = $wpdb->get_results($sql);

print("<ul>");
foreach ($usermeta as $post)
{
    print('<li>' . $post->meta_value . '<br/>');
    print('</li><br><br>');
}
print("</ul>");
$sql=
“选择用户id、元密钥、元值”。
“来自wp_usermeta”。
“其中meta_输入('name','userurl','points')”。
“按元值描述排序”;
$usermeta=$wpdb->get_结果($sql);
打印(
    ); foreach($usermeta作为$post) { 打印(“
  • ”.$post->meta_值。“
    ”); 打印(“


  • ”); } 打印(“
”);
试试这个

     SELECT `user_id`,
     max(case when  `meta_key` = 'name' then `usermeta` end)  as name  ,
     max(case when  `meta_key` = 'userurl' then `usermeta` end) as website ,
     max(case when  `meta_key` = 'points' then `usermeta` end ) as points 
     FROM wp_usermeta
     GROUP BY `user_id`           
     ORDER BY points DESC

  • 您应该这样构造表,以便更好、更容易地插入、更新和选择

    user_id   name     userurl    points 
      1       mark     mark.com     8
      2       luke     luke.com     4
      3       frank    frank.com    6
    
然后执行此查询

   select * from table order by points
编辑:

$usermeta=$wpdb->get_results($sql)或die(mysql_error());
回声“
    ”; foreach($usermeta作为$post) { 回显“
  • ”$post->name.”拥有“$post->points.”积分


  • ”; } 回声“
”;
您可能可以执行以下操作

select t1.user_id, t1.meta_value, t2.meta_value, t3.meta_value
from wp_usermeta t1
inner join wp_usermeta t2 on t1.user_id = t2.user_id and t2.meta_key = 'userurl'
inner join wp_usermeta t3 on t2.user_id = t3.user_id and t3.meta_key = 'points'
where t1.meta_key = 'name'

您是否考虑过使用2个查询

第一个是按点获取顺序,第二个是获取数据?然后操纵两个结果中的数据以创建新的有序数组

SELECT user_id FROM wp_usermeta WHERE meta_key = 'points' ORDER BY meta_value DESC;

SELECT user_id, meta_key, meta_value WHERE meta_key IN ('name','userurl','points');

您好,谢谢回复!它可以工作,但只显示以下几点:8 64@nikzluke和frank都有相同的用户id?2?对不起,我犯了一个错误,写了2而不是3,但你还是有感觉:)你好,谢谢你的代码。。。输出为黑色页面。。。但可以肯定的是,代码是正确的,如演示页面所示……还有一件事。。。我尝试用3个点的值更新标记点,但顺序是相同的3,6,4,而不是6,4,3。luke和frank都具有相同的用户id。
SELECT user_id FROM wp_usermeta WHERE meta_key = 'points' ORDER BY meta_value DESC;

SELECT user_id, meta_key, meta_value WHERE meta_key IN ('name','userurl','points');