这对我来说很好。postmeta包含的内容可能有点混乱。没有它,我得到了大约150个结果。有了它,我赚了5000多英镑。我从来没有空过结果。
由于Posteta每篇文章都有从零到数百个项目,因此它将为每个Posteta项目创建一个新行,并不断重复每行的帖子信息。
所以我补充道GROUP BY wp.ID
, 这打破了它:
查询1错误:选择列表的表达式#24不在GROUP BY子句中,并且包含未聚合的列“local”。wm。meta\\u id\'在功能上不依赖于GROUP BY子句中的列;这与sql\\u mode=only\\u full\\u group\\u by不兼容
这主要是因为GROUP BY
列(wp.ID
) 需要在SELECT子句中。无论如何,这也不会得到你的邮差。因此,如果没有分组方式,它就起作用了,您只需要在得到结果后进行处理,然后将它们合并。
没有一种很好的方法可以在一个查询中获取所有元。最好指定所需内容或使用多个查询。
下面是一个选项,但它可能会耗尽CONCAT()
条款。我有很多关于meta的帖子。它返回一列中的所有元键和一列中稍后可以在循环中分离出来的所有元值。
SELECT
wp.ID,
wp.*,
GROUP_CONCAT(wm.meta_key ORDER BY wm.meta_key DESC SEPARATOR \'||\') as meta_keys,
GROUP_CONCAT(wm.meta_value ORDER BY wm.meta_key DESC SEPARATOR \'||\') as meta_values
FROM
wptests_posts wp
INNER JOIN wptests_postmeta wm ON (wm.`post_id` = wp.`ID`) AND wm.meta_key NOT LIKE \'\\_%\'
INNER JOIN wptests_term_relationships wtr ON (wp.`ID` = wtr.`object_id`)
INNER JOIN wptests_term_taxonomy wtt ON (wtr.`term_taxonomy_id` = wtt.`term_taxonomy_id`) AND (wtt.`taxonomy` = \'category\')
INNER JOIN wptests_terms wt ON (wt.`term_id` = wtt.`term_id`) AND (wt.`slug` = \'uncategorised\')
GROUP BY wp.ID
类似于:
function custom_separate_postmeta( $a ) {
$output = array_merge( $a, array_combine( explode(\'||\', $a[\'meta_keys\']), array_map(\'maybe_unserialize\', explode(\'||\', $a[\'meta_values\'])) ) );
unset($output[\'meta_keys\']);
unset($output[\'meta_values\']);
return $output;
}
您可以在结果上运行它:
$posts = array_map( \'custom_separate_postmeta\', $posts );
只是关于这个问题的一些想法。。