mysql - 根据另一个列值按值排序

标签 mysql sql wordpress

这是来自 Wordpress 的查询,但适用于这种方式的任何数据库设置。他们在元字段中存储了一些数据。有一个表有两个字段,称为meta_name 和meta_value。这些字段用于存储几乎所有内容。例如,meta_name 可以是“lastname”,meta_value 是该名称的值。我有一个将返回所有用户的查询,但是当meta_name =“lastname”时如何按meta_value排序?以下是当前查询。

SELECT um.user_id, users.display_name, GROUP_CONCAT(um.meta_value SEPARATOR ' ') 
FROM `wp_7bv88z_usermeta` um, `wp_7bv88z_pmpro_memberships_users` u, `wp_7bv88z_users` users 
WHERE u.user_id=um.user_id and users.ID=u.user_id and (um.meta_key='pmpro_sfirstname' or um.meta_key='pmpro_slastname') 
and u.status='active'
GROUP BY um.user_id

示例数据:

user_meta表

╔════=====╦══════════════==╦══════=======╗
║ user_id ║  meta_key        ║ meta_value  ║
╠════=====╬══════════════==╬══════=======╣
║  1      ║ pmpro_sfirstname ║ Jeff        ║
║  1      ║ pmpro_slasttname ║ Atwood      ║
║  2      ║ pmpro_sfirstname ║ Geoff       ║
║  2      ║ pmpro_slasttname ║ Davis       ║
║  3      ║ pmpro_sfirstname ║ Jarrod      ║
║  3      ║ pmpro_slasttname ║ Minor       ║
║  4      ║ pmpro_sfirstname ║ Joel        ║
║  4      ║ pmpro_slasttname ║ Brown       ║
╚════=====╩════════════=====╩══════======╝

预期结果:

1, Jeff Atwood
4, Joel Brown
2, Geoff Davis
3, Jarrod Minor

最佳答案

我不喜欢旧语法或交叉连接 - 但你可以这样做;

SELECT um.user_id, 
       users.display_name, 
       GROUP_CONCAT(um.meta_value SEPARATOR ' ') 
FROM `user_meta` um, 
      `memberships_users` u, 
      `users` users,
      `user_meta` lname,
      `user_meta` fname
WHERE u.user_id = um.user_id 
      and users.id = u.user_id 
      and (lname.user_id = u.user_id and lname.meta_key = 'pmpro_slastname')
      and (fname.user_id = u.user_id and fname.meta_key = 'pmpro_sfirstname')
      and (um.meta_key='pmpro_sfirstname' or um.meta_key='pmpro_slastname') 
and   u.status='active'
GROUP BY lname.meta_value, fname.meta_value, um.user_id

查看此SQLFiddle看看它的实际效果

关于mysql - 根据另一个列值按值排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49883519/

相关文章:

mysql - 加速本地MySql对大表发起规范化查询

mysql - 在 LabView 中添加 MySQL 功能

sql - 如何在 sql server 2008 的存储过程中使用 if 比较两个字符串?

php - 文件 PHP 中的表单不发布 UTF-8

mysql - 根据条件行从另一个表中查找结果

MySQL 在 JOIN 值上执行 ORDER BY 时速度缓慢?

mysql - (SQL 帮助)有人可以告诉我我在哪里出错了吗?

mysql - Mariadb 加载,但几分钟后崩溃。服务器从 "snapshot"恢复后发生

php - Wordpress Hook 发布前更新

html - 试图在 <li> 中对齐 Shareholic 栏