1

我,我想以一种特殊的方式对我的成员进行查询和排序......有人可以帮忙吗?这就是问题所在。我想使用特殊的排序顺序在我的表中选择成员。配置文件字段值存储在表 wp_bp_xprofile_data 中,如下所示:

   id   | field_id | user_id |     value
--------+----------+---------+----------

例如,我有 3 个字段

  • NICKNAME (field_id = 1)
  • FIRSTNAME (field_id = 2)
  • 姓氏 (field_id = 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)。现在,我想对它们进行排序的不是一个,而是几个字段(名字和姓氏;以区分具有相同姓氏的人),以便查询按以下顺序返回用户:

frank arenzich (300), john arenzich (100), frank arenzich (200)。

有什么想法吗?

多谢 !!!

4

1 回答 1

2

这可能需要首先将其按列旋转到适当的表中,然后在多个列上对其进行排序。注意:这不会产生与原始表格相同格式的输出,但可以说更加灵活和有用,因为它将有关每个表格的所有信息组合user_id到一行中。

/* 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 表格,因此您可能无法更改其结构。但是,如果您确实可以选择修改它,我建议您将结构更改为类似于枢轴的输出。

于 2013-02-02T03:02:57.273 回答