Php 按类别和元值获取元值

Php 按类别和元值获取元值,php,sql,wordpress,metadata,Php,Sql,Wordpress,Metadata,好的,因此我需要编写一个数据库查询,根据键a和类别的值,从键b中获取元值 以下是我的sql: $cat = $post['cat']; $adh = $post['adhesion']; //get adhesions for category $query = $wpdb->get_results( "SELECT p.`ID`, pm.`meta_value` FROM {$wpdb->

好的,因此我需要编写一个数据库查询,根据
键a
类别的值,从
键b
中获取元值

以下是我的sql:

        $cat   = $post['cat'];
        $adh   = $post['adhesion'];
        //get adhesions for category
        $query = $wpdb->get_results(
            "SELECT p.`ID`, pm.`meta_value` FROM {$wpdb->postmeta} pm
            LEFT JOIN {$wpdb->posts} `p` ON `p`.`ID` = pm.`post_id`
            LEFT JOIN {$wpdb->term_relationships} `tr` ON `p`.`ID` = `tr`.`object_id`
            LEFT JOIN {$wpdb->term_taxonomy} `tt` ON `tr`.`term_taxonomy_id` = `tt`.`term_taxonomy_id`
            WHERE `pm`.`meta_key` = 'substrate_box'
            AND `pm`.`meta_key` = 'adhesion_box'
            AND `pm`.`meta_value` = '$adh'
            AND `p`.`post_status` = 'publish'
            AND `p`.`post_type` = 'post'
            AND `tt`.`taxonomy` = 'category'
            AND `tt`.`term_id` = $cat
            ");
我需要做的是为每个既有类别值又有第一个元键值的帖子获取元键值(
subscriber\u box


此sql语句返回null,因此我不太确定如何执行。

将WHERE子句条件移动到ON子句

SELECT p.`ID`, pm.`meta_value` FROM {$wpdb->postmeta} pm
            LEFT JOIN {$wpdb->posts} `p` ON `p`.`ID` = pm.`post_id`
            LEFT JOIN {$wpdb->term_relationships} `tr` ON `p`.`ID` = `tr`.`object_id`
            LEFT JOIN {$wpdb->term_taxonomy} `tt` ON `tr`.`term_taxonomy_id` = `tt`.`term_taxonomy_id`
            AND  `pm`.`meta_key` = 'substrate_box'
            AND `pm`.`meta_key` = 'adhesion_box'
            AND `pm`.`meta_value` = '$adh'
            AND `p`.`post_status` = 'publish'
            AND `p`.`post_type` = 'post'
            AND `tt`.`taxonomy` = 'category'
            AND `tt`.`term_id` = $cat

这就是最终奏效的解决方案,原谅它的丑陋:

$cat   = $post['cat'];
        $adh   = $post['adhesion'];
        //get adhesions for category
                $query   = $wpdb->get_results("
                                        SELECT pm.`post_id` FROM {$wpdb->postmeta} pm
            LEFT JOIN {$wpdb->posts} `p` ON `p`.`ID` = pm.`post_id`
            LEFT JOIN {$wpdb->term_relationships} `tr` ON `p`.`ID` = `tr`.`object_id`
            LEFT JOIN {$wpdb->term_taxonomy} `tt` ON `tr`.`term_taxonomy_id` = `tt`.`term_taxonomy_id`
            WHERE `pm`.`meta_key` = 'adhesion_box'
            AND `pm`.`meta_value` = '$adh'
            AND `p`.`post_status` = 'publish'
            AND `p`.`post_type` = 'post'
            AND `tt`.`taxonomy` = 'category'
            AND `tt`.`term_id` = $cat
                        ");
    if(is_array($query)){
        foreach($query as $obj){
            $tmps = $wpdb->get_results("
                    SELECT p.`ID` as post_id, pm.`meta_value` FROM {$wpdb->postmeta} pm
                     LEFT JOIN {$wpdb->posts} `p` ON `p`.`ID` = pm.`post_id`
                      WHERE pm.`post_id` = {$obj->post_id}
                          AND pm.`meta_key` = 'substrate_box'
            ");
            if(is_array($tmps) && count($tmps) > 0){
                foreach($tmps as $tmp){
                    $return[$tmp->post_id] = $tmp->meta_value;
                }
            }
        }
    }

这会根据帖子类别和第一个元数据选择并返回第二个元数据。

它应该是
,而不是
上的double
,这会转储大量内容,并且没有一个是正确的元数据。这会提取网站标题等各种信息,但不会从
meta_键
“substander_box”中获取任何信息。@RemySheppard,可能会给出这些表中的样本数据和预期输出,这将更容易理解表之间的关系。