我需要检索特定元键的一组唯一元值。我找到了Paul Chimoy的一个功能,它几乎可以满足我的要求。我只需要1)。具有二级资格的版本,以及2)。具有二级和三级资格的版本,以便输出我需要的内容。
该函数输出meta_key'树的所有元值。和'州'但我需要能够输出,1)。 meta_key'树的所有唯一元值。 meta_key' where'等于加利福尼亚'和2)。 meta_key'树的所有唯一值meta_key' where'等于加利福尼亚'和meta_key'国家'等于'美国'。
Trees
meta_key = trees
meta_value = pine, oak, sequoia
States
meta_key = states
meta_value = california, washington, florida
Countries
meta_key = countries
meta_value = usa, uk, ireland
没有成功,我调整了功能以包括:
AND (pm.meta_key = 'states' AND pm.meta_value = 'california')
这是原始功能,没有我的额外资格:
function get_unique_post_meta_values( $key = 'trees', $type = 'post', $status = 'publish' ) {
global $wpdb;
if( empty( $key ) )
return;
$res = $wpdb->get_col( $wpdb->prepare( "
SELECT DISTINCT pm.meta_value FROM {$wpdb->postmeta} pm
LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
WHERE pm.meta_key = '%s'
AND p.post_status = '%s'
AND p.post_type = '%s'
", $key, $status, $type ) );
return $res;
}
我的有限知识不允许我根据自己的需要适当调整功能。我感谢为实现目标而提供的任何帮助。
提前致谢。
答案 0 :(得分:1)
我知道这已经过时了,你可能不再寻找了,但如果其他人需要这个,那么这就是需要做的事情。
现在你的select语句是:
SELECT DISTINCT pm.meta_value FROM {$wpdb->postmeta} pm
LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
WHERE pm.meta_key = '%s'
AND p.post_status = '%s'
AND p.post_type = '%s'
这将基于一个键选择元值。
相反,您希望基于一个键获取另一个键的唯一元值。
要执行此操作,您需要选择帖子,然后根据您所需的键选择其他不同的元数据值。这意味着您需要嵌套SQL,并获取您的帖子ID。
SELECT DISTINCT pm.meta_value FROM {$wpdb->postmeta} pm WHERE pm.post_id IN
(SELECT pm.post_id FROM {$wpdb->postmeta} pm
LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
WHERE pm.meta_key = '%s'
AND pm.meta_value = '%s'
AND p.post_status = '%s'
AND p.post_type = '%s')
AND pm.meta_key = '%s'
您的包装语句应如下所示:
$res = $wpdb->get_col( $wpdb->prepare($sql, $searchkey, $searchvalue, $poststatus, $posttype, $findkey ) );
假设您输入上面的SQL,树,松树,发布,发布,状态 - 您应该检索松树生长的状态列表。
希望这有助于任何偶然发现此事的人!