8

カスタム フィールドを含むワード プレス サイトがあります。リピーター フィールドをテーブルとしてクエリする必要があります。次のようになります。

        | param_1 | param_2 | param_2  | param_4
        |    20   |   20    | 20       |   20
        |    555  |   680   | 56       |    0
        |    5555 |   45    | 56       |    1
        |    69   |   0     | 45       |    0

同じ行のクエリと一致する場合にのみ、このリピーターにクエリを実行して結果を取得する必要があります

私のメタクエリは次のようになります。

[post_type] => product
[posts_per_page] => -1
[orderby] => title
[order] => ASC
[meta_query] => Array (
    [relation] => AND
    [0] => Array (
        [key] => BBBproduct_params_values_AAA_param_value_0
        [value] => 25
        [compare] => <=
        [type] => NUMERIC
        )
    [1] => Array (
        [key] => BBBproduct_params_values_AAA_param_value_1
        [value] => 56
        [compare] => >=
        [type] => NUMERIC
        )
    [2] => Array (
        [key] => BBBproduct_params_values_AAA_param_value_2
        [value] => 56
        [compare] => >=
        [type] => NUMERIC
        )
    [3] => Array (
        [key] => BBBproduct_params_values_AAA_param_value_3
        [value] => 0
        [compare] => =
        [type] => NUMERIC
        )
    )

彼女は次のコードで作成されます。

if( $product_search_by_param_active ){
function my_posts_where( $where ){


    $where = str_replace("AAA_param_value_", "%_param_value_", $where);
    $where = str_replace("meta_key = 'BBBproduct_params_values_", "meta_key LIKE 'product_params_values_", $where);


    return $where;
}
add_filter('posts_where', 'my_posts_where');


$range_angine_settings = get_field('param_search_range_settings');
$search_args['meta_query'] = array();
$search_args['meta_query'] ['relation'] = 'AND';


foreach( $range_angine_settings as $rangekey => $search_range ){
    ${'range-'.$rangekey} = $_GET['range-'.$rangekey]? $_GET['range-'.$rangekey] : '0';
    if ( $_GET['range-'.$rangekey] ) $has_range_query = true; 
    //$pre_prama_value = 'product_params_values_'.strval($rangekey).'_param_value_AAA';

    if( isset($_GET['range-'.$rangekey])){
        $search_args['meta_query'][] = array(
                "key" => 'BBBproduct_params_values_AAA_param_value_'.strval($rangekey),
                "value"    => $search_range['search_metric_ranges'][${'range-'.$rangekey}]['range_value'],
                "compare"  => $search_range['product_search_logic'],
                'type'    => 'NUMERIC'
        );      
    }
}
}

問題は、クエリが同じ行にない場合でも、「%」が原因で結果が得られることです。

上記の例では、結果を取得しないことを意図していますが、すべての条件が別の行で満たされているため、結果が得られます。

このキングオブクエリを作成して行番号で結果を得る方法はありますか?

4

1 に答える 1