获取元密钥的所有唯一后元值


Getting All Unique Post Meta Values of a Meta Key

我需要检索特定元键的一组唯一元值。我从Paul Chimoy那里找到了一个函数,它几乎可以满足我的需求。我只需要1).一个具有二级资格的版本,以及2).一个具有二级和三级资格的版本,以便它输出我需要的内容。

该函数输出meta_key '树'和'州'的所有元值,但我需要能够输出,1). meta_key '树'的所有唯一元值,其中meta_key '州'等于'california', 2). meta_key '树'的所有唯一值,其中meta_key '州'等于'california'和meta_key '国家'等于'usa'。

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;
}

我有限的知识使我不能根据我的需要适当地调整功能。我很感激能提供的任何帮助,以实现我的目标。

我知道这是旧的,你可能不会再看了,但如果有人需要这个,这是需要做的。

现在你的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'

将基于一个键选择元值。

相反,您希望基于一个键获得另一个键的唯一元值。

要做到这一点,您需要选择post,然后根据所需的键选择其他不同的元值。这意味着您需要嵌套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中提供了树、松树、post、发布、状态——您应该检索松树生长的状态列表。

希望这能帮助任何偶然发现这个的人!