Php 列字段中的数据库SQL按值排序
我有一个WordPress博客,显然有一个WordPress数据库 数据库名称: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
通信的两个表是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');