按类别和自定义字段对wordpress过滤器的高级SQL查询

问题描述:

我想选择按类别和其他自定义字段过滤的自定义字段“portata”的不同值。按类别和自定义字段对wordpress过滤器的高级SQL查询

这是查询,选择按类别自定义值:

global $wpdb; 
$querystr2 = " 
SELECT DISTINCT wpostmeta.meta_value 
FROM $wpdb->posts wposts 
LEFT JOIN $wpdb->postmeta wpostmeta ON wposts.ID = wpostmeta.post_id 
LEFT JOIN $wpdb->term_relationships ON (wposts.ID = $wpdb->term_relationships.object_id) 
LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) 


WHERE wpostmeta.meta_key = 'portata' 
AND $wpdb->term_taxonomy.taxonomy = 'category' 
AND $wpdb->term_taxonomy.term_id IN($variabile_c) 
ORDER BY wpostmeta.meta_value ASC 

"; 

我怎么可以在其他自定义字段添加到过滤器?

您需要再次加入$ wpdb-> postmeta,为每个连接使用一个单独的别名,并向WHERE子句中添加几个AND以应用额外的条件 - 例如:

SELECT DISTINCT wpostmeta1.meta_value 
    FROM $wpdb->posts wposts 
    LEFT JOIN $wpdb->postmeta wpostmeta1 ON wposts.ID = wpostmeta1.post_id 
    LEFT JOIN $wpdb->postmeta wpostmeta2 ON wposts.ID = wpostmeta2.post_id 
    LEFT JOIN $wpdb->term_relationships ON (wposts.ID = $wpdb->term_relationships.object_id) 
    LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) 
    WHERE wpostmeta1.meta_key = 'portata' 
    AND wpostmeta2.meta_key = 'other-custom-field-value' 
    AND $wpdb->term_taxonomy.taxonomy = 'category' 
    AND $wpdb->term_taxonomy.term_id IN($variabile_c) 
    ORDER BY wpostmeta1.meta_value ASC 

用您需要过滤的第二个自定义字段值替换“其他自定义字段值”。

+0

谢谢!现在它工作! – user1712790

+0

很高兴为您提供帮助,如果您能接受我的回答,我将非常感激,以便获得信誉利益。谢谢! –

谢谢亚伦米勒!现在它的工作!

SELECT DISTINCT wpostmeta1.meta_value 
FROM $wpdb->posts wposts 
    LEFT JOIN $wpdb->postmeta wpostmeta1 ON wposts.ID = wpostmeta1.post_id 
    LEFT JOIN $wpdb->postmeta wpostmeta2 ON wposts.ID = wpostmeta2.post_id 
    LEFT JOIN $wpdb->term_relationships ON (wposts.ID = $wpdb->term_relationships.object_id) 
    LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) 
WHERE wpostmeta1.meta_key = 'portata' 
    AND wpostmeta2.meta_key = 'alimentazione' 
AND wpostmeta2.meta_value = '$variabile_portata' 
    AND $wpdb->term_taxonomy.taxonomy = 'category' 
    AND $wpdb->term_taxonomy.term_id IN($variabile_c) 
ORDER BY wpostmeta1.meta_value ASC 

谢谢Aaron Miller。 现在,如果你想通过自定义字段添加1个其他文件管理器,我必须添加1个左连接吗? 谢谢!

+0

您需要针对每个自定义字段过滤器加入$ wpdb-> postmeta一次,在每个连接中使用唯一的别名 - 这里的别名是wpostmeta1和wpostmeta2,因此您可以添加例如wpostmeta3,&c。但请注意您的性能 - 添加多个左连接往往会为数据库引擎生成一个非常大的结果集以供过滤,如果您的索引状态不佳或需要很多时间定义自定义字段。 –