【发布时间】:2015-09-24 21:19:36
【问题描述】:
我需要帮助来重写下面的查询以接受第二个和第二个 + 第三个资格。
元键和值示例:
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 语句,但无法使其正常工作。
二级资格:
AND (pm.meta_key = 'states' AND pm.meta_value = 'california')
第二和第三资格:
AND (pm.meta_key = 'states' AND pm.meta_value = 'california')
AND (pm.meta_key = 'countires' AND pm.meta_value = 'usa')
查询功能我需要帮助重写:
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;
}
提前感谢您的帮助!如果需要进一步说明,请告诉我。
【问题讨论】:
-
您的第二/第三个资格在同一个查询中?那是不可能的。您不能要求单个字段(例如 pm.meta_key)同时具有两个不同的值。您可以检查多个值集,例如
(a and B) OR (c and d) -
感谢 Marc 的反馈。我的知识有限,所以评论可以帮助我了解更多。在一般情况下或在函数内的查询构造下是不可能的吗?该查询适用于仅检索“树”的唯一值,但我需要进一步限定和限制检索到的值。我认为这个功能可能是我的解决方案。
-
如果 meta_value 是一个 3 的数组,它可以工作。您可能有一个元对象数组,其中包括一个 meta_key 和 meta_value 数组。不过,我不记得 PHP 是否像 JavaScript 和 JSON 那样支持它。