使用命令MySql查询

时间:2013-02-02 02:55:38

标签: mysql

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

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

例如,我有3个字段

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

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

这样做有什么想法吗?

非常感谢!

1 个答案:

答案 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

Here is a demonstration...

看起来这是一个Wordpress表,所以你可能无法改变它的结构。但如果您确实可以选择修改它,我建议您更改结构,使其类似于枢轴的输出。