我有一段时间了 - 我有一个只有4列的表,可以定义3到20位的信息。我甚至不确定如何描述问题,除了显示数据库的部分和我想要的输出,所以这里。该表有4列:meta_id,post_id,meta_key,meta_value。是的,它来自WP。我需要开始,(我认为)有一个不同的post_id列表,其中meta_key =“location”和meta_value =“washington”。使用该列表,我想返回一个新的“表”或所有其他数据的数组,其中post_id =每个不同的值,meta_key值是一个新的字段名称,其对应的meta_value为其值。我知道这没有多大意义,但是这里是来自我的独特列表中的一个post_id的相关数据 - 这可能会帮助你了解我所追求的内容。我从上面提到的post_id的DISTINCT列表中得到了这个结果的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_value替换meta_key =“image1”或“image2”的meta_value,其中post_id = meta_value,其中post_id = 5923 AND 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
这有意义吗?这真的让我很伤心 - 对这个复杂查询的任何帮助都非常感谢!
答案 0 :(得分:1)
哈,使用wordpress我一直这样做。您基本上想要使用多个连接,并使用column_name
作为desired_name
来设置列名。这是一个使用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"
这是未经测试但您应该明白这一点。希望它有所帮助
答案 1 :(得分:0)
实现此目的的最快和最有效的查询如下:
$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");