我,我想以一种特殊的方式对我的成员进行查询和排序......有人可以帮忙吗? 这是问题所在。 我想使用特殊的排序顺序选择表格中的成员。 配置文件字段值存储在表wp_bp_xprofile_data中,如下所示:
id | field_id | user_id | value
--------+----------+---------+----------
例如,我有3个字段
表格行如下所示:
id | field_id | user_id | value
--------+----------+---------+----------
2544 1 100 fib
2545 2 100 john
2546 3 100 arenzich
2547 1 200 dog
2548 2 200 rick
2549 3 200 zarenburg
2550 1 300 fox
2551 2 300 frank
2552 3 300 arenzich
我有这个查询使用一个字段对它们进行排序,例如按字母顺序对它们进行排序:
SELECT *
FROM wp_bp_xprofile_data u WHERE u.field_id = 1 ORDER BY u.value ASC
所以他们将这样排序:dog(200),fib(100),然后是fox(300)。 现在,我想对它们进行排序,而不仅仅是几个字段(firstname和lastname;以区分具有相同姓氏的人),以便查询以此顺序返回用户:
frank arenzich(300),john arenzich(100),frank arenzich(200)。
这样做有什么想法吗?
非常感谢!
答案 0 :(得分:2)
这可能需要首先将其按列旋转到适当的表中,然后在多列上对其进行排序。
注意:这将不以与原始表相同的格式生成输出,但可以说它更灵活,更有用,因为它将每个user_id
的所有信息组合成一行。 / p>
/* A column-wise pivot of NICKNAME, FIRSTNAME, LASTNAME */
SELECT
user_id,
MAX(CASE WHEN field_id = 1 THEN value ELSE null END) AS NICKNAME,
MAX(CASE WHEN field_id = 2 THEN value ELSE null END) AS FIRSTNAME,
MAX(CASE WHEN field_id = 3 THEN value ELSE null END) AS LASTNAME
FROM wp_bp_xprofile_data
GROUP BY user_id
/* Include the HAVING if you only want those who have both first & last names specified */
HAVING
FIRSTNAME IS NOT NULL
AND LASTNAME IS NOT NULL
/* Pivoted columns can then be treated in the ORDER BY */
ORDER BY
FIRSTNAME,
LASTNAME
看起来这是一个Wordpress表,所以你可能无法改变它的结构。但如果您确实可以选择修改它,我建议您更改结构,使其类似于枢轴的输出。