Php 需要帮助组合返回简单数组的复杂嵌套MySQL查询吗

Php 需要帮助组合返回简单数组的复杂嵌套MySQL查询吗,php,mysql,join,Php,Mysql,Join,我对这件事感到很难过——我有一个只有4列的表,其中定义了3到20位的信息。我甚至不知道如何描述这个问题,除非通过显示DB的部分和我想要的输出,所以接下来。该表有4列:meta_id、post_id、meta_key、meta_value。是的,是WP的。我需要从一个不同post_id的列表开始,其中meta_key=“location”和meta_value=“washington”。使用该列表,我想返回一个新的“表”或所有其他数据的数组,其中post_id=每个不同的值,meta_key值是一

我对这件事感到很难过——我有一个只有4列的表,其中定义了3到20位的信息。我甚至不知道如何描述这个问题,除非通过显示DB的部分和我想要的输出,所以接下来。该表有4列:meta_id、post_id、meta_key、meta_value。是的,是WP的。我需要从一个不同post_id的列表开始,其中meta_key=“location”和meta_value=“washington”。使用该列表,我想返回一个新的“表”或所有其他数据的数组,其中post_id=每个不同的值,meta_key值是一个新字段名,对应的meta_值作为它的值。我知道这没有多大意义,但这里是我独特列表中一个帖子id的相关数据——这可能会帮助你了解我在追求什么。我从上面提到的post_id的不同列表中获得了这个结果的post_id

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
现在,关键是:我需要用meta_值替换meta_值,其中meta_key=“image1”或“image2”,其中post_id=meta_值,其中post_id=5923和meta_key=“image1”或“image2”。该数据来自表中如下所示的部分:

meta_id  |  post_id  |  meta_key  |  meta_value
---------|-----------|------------|-------------------
46942    |  5924     |  file      | img1.jpg
46923    |  5925     |  file      | img2.jpg
id   |  adlink            |  sublock  |  size   | location   | image1   | image2
-----|--------------------|-----------|---------|------------|----------|---------
5923 | htp://whatever.com | Menu Page | Premium | Washington | img1.jpg | img2.jpg
我想要的是这样的:

meta_id  |  post_id  |  meta_key  |  meta_value
---------|-----------|------------|-------------------
46942    |  5924     |  file      | img1.jpg
46923    |  5925     |  file      | img2.jpg
id   |  adlink            |  sublock  |  size   | location   | image1   | image2
-----|--------------------|-----------|---------|------------|----------|---------
5923 | htp://whatever.com | Menu Page | Premium | Washington | img1.jpg | img2.jpg

这有意义吗?这真的让我很痛苦-非常感谢您对这个复杂查询的任何帮助

ha,与wordpress合作时,我总是这样做。您基本上希望使用多个联接,并使用
列名称
作为
所需的列名称
来设置列名。下面是一个使用id 5923的示例:

SELECT meta1.post_id as 'id', 
 meta1.meta_value as 'adlink',
 meta2.meta_value as 'sublock',
 meta3.meta_value as 'size',
 meta4.meta_value as 'location',
 meta5.meta_value as 'image1',
 meta6.meta_value as 'image2' 

FROM wp_postmeta as meta1 

INNER JOIN wp_postmeta as meta2 ON meta1.post_id = meta2.post_id 
INNER JOIN wp_postmeta as meta3 ON meta1.post_id = meta3.post_id 
INNER JOIN wp_postmeta as meta4 ON meta1.post_id = meta4.post_id
INNER JOIN wp_postmeta as meta5 ON meta1.post_id = meta5.post_id
INNER JOIN wp_postmeta as meta6 ON meta1.post_id = meta6.post_id

WHERE 
  meta1.post_id = '5923'  
  AND meta1.meta_key = "adlink"
  AND meta2.meta_key = "sublock"
  AND meta3.meta_key = "size"
  AND meta4.meta_key = "location"
  AND meta5.meta_key = "image1"
  AND meta6.meta_key = "image2" 

这是未经测试,但你应该得到的想法。希望它有帮助

实现这一点的最快、最有效的查询如下:

$result = mysql_query("SELECT post_id,
       MAX(CASE WHEN meta_key = 'size' THEN meta_value END) size,
       MAX(CASE WHEN meta_key = 'adlink' THEN meta_value END) adlink,
       MAX(CASE WHEN meta_key = 'frontpage' THEN meta_value END) frontpage,
       MAX(CASE WHEN meta_key = 'expiration' THEN meta_value END) expiration,
       MAX(CASE WHEN meta_key = 'image1' THEN meta_value END) image1,
       MAX(CASE WHEN meta_key = 'image2' THEN meta_value END) image2,
       MAX(CASE WHEN meta_key = 'image1' THEN meta_value END) image3,
       MAX(CASE WHEN meta_key = 'image2' THEN meta_value END) image4,
       MAX(CASE WHEN meta_key = 'iframe' THEN meta_value END) iframe,
       MAX(CASE WHEN meta_key = 'location' THEN meta_value END) location,
       MAX(CASE WHEN meta_key = 'sublocation' THEN meta_value END) sublocation
       FROM wp_postmeta WHERE post_id IN(SELECT post_id from wp_postmeta WHERE meta_value LIKE '%". $page ."%')
 GROUP BY post_id");

好的,(对我来说)最困难的部分是找出如何得到结果表,将每个不同的post_id作为一个单独的行包含进去,这样查询也包括得到不同的列表。。。有意义吗?@davidmclave那么你想要我假设的不止一个post_id的结果?您是否正在尝试获取选定的几个或全部post_id的结果?尝试仅获取与meta_key=“location”和meta_value=“washington”相关的数据的结果-将有很多。因此,是的,在这种情况下,不止一个post_-id,在上面的示例中,您只需要添加
和meta4.meta_-value='Washington'
,就是这样。将返回所有post_id+位置=washington@DavidMcClave哦,但是删除第一个
meta1.post_id='5923'
,因为在这种情况下不需要这样做。