mysql - 将多个mysql表结果聚合为一个

标签 mysql sql

我正在写一个包含请愿书的 wordpress 网站,我需要按姓名、国家和职位显示所有请愿者。

但是我使用的 wordpress 主题设置为将请愿用户的值存储在多行中(似乎 wordpress 总是对用户这样做)。

每个用户都存储为具有“请愿者”角色的 WordPress 用户。我设法让所有的请愿者都使用这个查询

SELECT display_name
     , meta_value
     , meta_key 
  FROM wp_users 
  JOIN wp_usermeta 
    ON wp_users.ID = wp_usermeta.user_id 
  WHERE meta_key = "petition_user_country" 
     OR meta_key = "petition_user_state" 
    AND meta_value !="" 
  ORDER 
     BY ID DESC;

此查询现在返回(仅包含测试数据)

+--------------------------+------------+-----------------------+
| display_name             | meta_value | meta_key              |
+--------------------------+------------+-----------------------+
| Test3 Test34             | AF         | petition_user_country |
| Test3 Test34             | Tester     | petition_user_state   |
| Test Testnomsen          | NO         | petition_user_country |
| Test Testnomsen          | Student    | petition_user_state   |
| Brushan                  | NO         | petition_user_country |
| Kristian                 | Student    | petition_user_state   |
| Andreas Noe              | NO         | petition_user_country |
| Georg  Simone            | NO         | petition_user_country |
+--------------------------+------------+-----------------------+

meta_value 列同时包含此人的职位和他们来自的国家/地区。我需要我的 HTML 表格来将每个人显示为一个并显示国家、职位和姓名。

最佳答案

您可以使用聚合来获取每个实体及其不同属性的单行数据

SELECT display_name,
       MAX(CASE WHEN meta_key = 'petition_user_country' THEN meta_value ELSE NULL END) country,
       MAX(CASE WHEN meta_key = 'petition_user_state'   THEN meta_value ELSE NULL END) state,
FROM wp_users 
JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id 
WHERE meta_key IN('petition_user_country','petition_user_state')
  AND meta_value !="" 
GROUP BY display_name
ORDER BY display_name ASC;

关于mysql - 将多个mysql表结果聚合为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50629450/

相关文章:

php - 多个查询在一个php文件中使用前一个查询的结果集

mysql - 如何将我的 Amazon Elastic Beanstalk MySQL RDS 实例升级到 5.6?

php - 基于数组创建动态 Highcharts

php - 在php中管理用户权限

mysql - mysql 客户端中的命令历史记录仅显示多行查询的最后一行

mysql - SQL IF ELSE 语句

mysql - 如果列没有特定文本,如何更改列的值?

java - 如何使用JSQLParser将插入sql语句转换为删除sql语句

mysql - 在选择查询中显示行号

mysql - 从 Mysql 中的同一个表中的 IN() 中获取子记录中的父名称