mysql - 如何在MySQL查询中更好地获取不同的行?

标签 mysql sql

我的查询获取了我需要的所有信息,但在我的一生中,我似乎无法让它按照我想要的方式组织行。显然,这些信息来自两个不同的表,其中一个表是经过组织的,所以我想要的那一天不是以一种易于获取的方式组织的,如下所示:

post_id | meta_key | meta_value
--------|----------|-----------
1       | key_one  | value1
1       | key_two  | value2
2       | key_one  | value3
2       | key_two  | value4

当我想要的时候:

post_id | key_one | key_two
--------|----------|-----------
1       | value1   | value2
2       | value3   | value4

这是查询,返回结果在下面。同样,信息是正确的,但分散在各个行中。我知道我只差一个声明...

SELECT DISTINCT wp_postmeta.post_id, 
CASE WHEN wp_postmeta.meta_key = 'allowed' THEN wp_postmeta.meta_value END allowed,
CASE WHEN wp_postmeta.meta_key = 'amenities' THEN wp_postmeta.meta_value END amenities,
CASE WHEN wp_postmeta.meta_key = 'trail-type' THEN wp_postmeta.meta_value END trailtype,
CASE WHEN wp_postmeta.meta_key = 'weatherlat' THEN wp_postmeta.meta_value END weatherlat,
CASE WHEN wp_postmeta.meta_key = 'weatherlon' THEN wp_postmeta.meta_value END weatherlon
from wp_postmeta WHERE wp_postmeta.post_id IN (SELECT object_id AS id FROM wp_term_relationships WHERE term_taxonomy_id = 74)

这是回复,下面是我想要得到的内容

post_id | allowed | amenities | trailtype | weatherlat | weatherlon
--------|---------|-----------|-----------|------------|-----------
503     | 1,2,3   | NULL      | NULL      | NULL       | NULL
503     | NULL    | No-Water  | NULL      | NULL       | NULL
503     | NULL    | NULL      | Easy      | NULL       | NULL
503     | NULL    | NULL      | NULL      | NULL       | NULL
503     | NULL    | NULL      | NULL      | 47.37070   | NULL
503     | NULL    | NULL      | NULL      | NULL       | -122.00633
566     | 5,6,7   | NULL      | NULL      | NULL       | NULL
566     | NULL    | Restrooms | NULL      | NULL       | NULL
566     | NULL    | NULL      | Moderate  | NULL       | NULL
566     | NULL    | NULL      | NULL      | NULL       | NULL
566     | NULL    | NULL      | NULL      | 47.729212  | NULL
566     | NULL    | NULL      | NULL      | NULL       | -117.142829

还有我想要的

post_id | allowed | amenities | trailtype | weatherlat | weatherlon
--------|---------|-----------|-----------|------------|-----------
503     | 1,2,3   | No-Water  | Easy      | 47.37070   | -122.00633
566     | 5,6,7   | Restrooms | Moderate  | 47.729212  | -117.142829

最佳答案

修改您的查询以在每列上使用group by和聚合函数:

SELECT wp_postmeta.post_id, 
       max(CASE WHEN wp_postmeta.meta_key = 'allowed' THEN wp_postmeta.meta_value END) as allowed,
       max(CASE WHEN wp_postmeta.meta_key = 'amenities' THEN wp_postmeta.meta_value END) as amenities,
       max(CASE WHEN wp_postmeta.meta_key = 'trail-type' THEN wp_postmeta.meta_value END) as trailtype,
       max(CASE WHEN wp_postmeta.meta_key = 'weatherlat' THEN wp_postmeta.meta_value END) as weatherlat,
       max(CASE WHEN wp_postmeta.meta_key = 'weatherlon' THEN wp_postmeta.meta_value END) as weatherlon
from wp_postmeta
where wp_postmeta.post_id IN (SELECT object_id AS id
                              FROM wp_term_relationships
                              WHERE term_taxonomy_id = 74
                             )
group by wp_postmeta.post_id;

关于mysql - 如何在MySQL查询中更好地获取不同的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21976500/

相关文章:

mysql - 子表状态

SQL 查询 - 使用替换功能很慢

php - 在 php 中将整数转换为 double

mysql - SO Prisma GraphQL 错误 : Whoops. 看起来像内部服务器错误

mysql - 使用 DATE_FORMAT 的 MySQL View 的 Alembic 迁移脚本

mysql - 在 MySQL 中查找字符串时遇到一些麻烦

php - ajax中的功能不起作用

mysql - 插入表格时自动保存某些行的选项有哪些?

java - SQL WHERE 中的多个条件 AND

php - 检查数据库是否有项目,如果没有则插入