在很多程序员的帮助下,我一直在努力解决这个问题,没有任何结果。我有一张看起来像这样的表:
meta_id | post_id | meta_key | meta_value
---------|-----------|------------|-------------------
46922 | 5923 | adlink | htp://whatever.com
46923 | 5923 | subloc | Menu Page
46924 | 5923 | size | Premium
46924 | 5923 | location | Washington
46924 | 5923 | image1 | 5924
46924 | 5923 | image2 | 5925
46925 | 5928 | adlink | htp://whatever.com
46926 | 5928 | subloc | Regular Page
46927 | 5928 | size | Standard
46927 | 5928 | location | Idaho
46927 | 5928 | image1 | 5926
46927 | 5928 | image2 | 5927
我有以下查询返回我正在寻找的特定结果,但格式就像表格;即,有许多结果行与一些常见的post_id - 我需要创建一个数组或结果表,我可以从中访问信息,就好像每个DISTINCT post_id创建一个具有该ID唯一数据的行,如下所示:
id | adlink | sublock | size | location | image1 | image2
-----|--------------------|-------------|---------|------------|----------|---------
5923 | htp://whatever.com | Menu Page | Premium | Washington | 5924 | 5925
5928 | htp://whatever.com | regular Page| Premium | Idaho | 5926 | 5927
这是返回正确信息的查询:
SELECT *
FROM wp_postmeta
WHERE post_id IN (
SELECT post_id
FROM wp_postmeta
WHERE (
meta_value LIKE '%Washington%'
AND meta_key = 'location'
)
答案 0 :(得分:4)
使用条件聚合来转移数据
SELECT post_id,
MAX(CASE WHEN meta_key = 'adlink' THEN meta_value END) adlink,
MAX(CASE WHEN meta_key = 'sublock' THEN meta_value END) sublock,
MAX(CASE WHEN meta_key = 'size' THEN meta_value END) size,
MAX(CASE WHEN meta_key = 'location' THEN meta_value END) location,
MAX(CASE WHEN meta_key = 'image1' THEN meta_value END) image1,
MAX(CASE WHEN meta_key = 'image2' THEN meta_value END) image2
FROM wp_postmeta
GROUP BY post_id
输出:
| POST_ID | ADLINK | SUBLOCK | SIZE | LOCATION | IMAGE1 | IMAGE2 | |---------|--------------------|--------------|----------|------------|--------|--------| | 5923 | htp://whatever.com | Menu Page | Premium | Washington | 5924 | 5925 | | 5928 | htp://whatever.com | Regular Page | Standard | Idaho | 5926 | 5927 |
这是 SQLFiddle 演示
答案 1 :(得分:0)
您可以在PHP代码中构建结果表。与此类似:
$result[$row["post_id"]][$row["meta_key"]] = $row["meta_value"];
其中$ row - 来自myssql结果的一行