这是来自 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/