特异性递减的嵌套查询

时间:2021-11-25 作者:Fluxian

我的目标是n 来自查询的自定义帖子
我在ACF中存储了4个值。如果我能找到n 如果所有这些值与当前帖子的值相同,那么我想返回这些值n.
例如,如果我只能找到5个ACF值相同的帖子,那么我需要这些和其余的n-5 共享3个ACF值,然后共享2个,然后共享1个,如果我没有找到任何值n 帖子还没有发布。

我成功地做到了这一点,但这似乎是一种相当愚蠢的做法。

function queryRelatedMedia($array, $post_id, $postLimit, $genre = null, $rating = null){
    $cCount = array_search(end($array), $array);
    $cCount = $cCount? $cCount : 0;
    $query = new WP_Query(.....); // Some relevant query
    while($query -> have_posts() and $cCount < $postLimit){
        $query -> the_post();

        if($post_id == get_the_id()){ continue; }
        if($rating and get_field("rating") != $rating){ continue; }
        if($genre and get_field("genre") != $genre){ continue; }

        $resArr = array(.....); // Store relevant data in array
        if(!array_search($resArr, $array)){
            array_push($array, $resArr);
            $cCount++;
        }
    }
}

$queryArray = queryRelatedMedia(array(),     $post_id, $amount, $genre, $rating);
$queryArray = queryRelatedMedia($queryArray, $post_id, $amount, $genre);
$queryArray = queryRelatedMedia($queryArray, $post_id, $amount);
因此,我首先使用最具体的检查运行查询。然后看看帖子的数组有多大,如果不是的话n 然后,我用少一个参数再次运行它。

有没有更聪明(更有效)的方法?

1 个回复
最合适的回答,由SO网友:Kumar 整理而成

这个答案只是解释了一种可能的方法,没有提供详细的代码。

以下方法更多地依赖PHP过滤结果,而不是多个WP\\U查询,它使用单个WP\\U查询以及多个get\\u post\\u meta()调用。

步骤1:

对于当前post,请使用get\\u field()或get\\u post\\u meta()以及所有必要的键和值构建一个数组:

$current_post = array(
   k1 => v1, 
   k2 => v2, 
   k3 =>v3 
);
第2步:

使用至少有一个匹配键、值对的WP\\u查询(meta\\u查询)获取所有帖子ID。

WP_Query[
\'meta_query\'    => array(
        \'relation\'      => \'OR\',
        array(
            \'key\'       => \'k1\',
            \'value\'     => \'v1\',
            \'compare\'   => \'=\'
        ),
        array(
            \'key\'       => \'k2\',
            \'value\'     => \'v2\',
            \'compare\'   => \'=\'
        ),
        array(
            \'key\'       => \'k3\',
            \'value\'     => \'v3\',
            \'compare\'   => \'=\'
        )
    )
]
步骤3:

对于以上结果中的所有post ID;迭代并构建一个与所有键、值匹配的数组;

$matching_posts = array(
     post_id_1 => array ( 
       k1 => v1, 
       k2 => v2, 
       k3 =>v3 
     ),
     post_id_2 => array ( 
       k1 => v1, 
       k2 => v2, 
       k3 =>v3 
     )
     .
     .
     .
    );
步骤4:

4.1:

使用php数组函数[array_intersect]获取$current_post[]的相关帖子ID;

从$matching\\u posts[]中删除相关post id

4.2删除最后一个键=>;来自$current\\u post[]的值;并重复4.1

重复4.2

这将为您提供3组阵列:

使用所有键发布ID=>;共有值(3),然后是2个相同的键;值,然后只有单键的帖子=>;共同价值n 对于当前帖子,您可以通过一个简单的查询n - x 不包括上述所有职位的职位。其中x是所有匹配帖子的总和。

相关推荐

JQuery php请求返回一个奇怪的结果

我有一个奇怪的小故障发生在我身上,我不知道我是如何产生它的,或者它是否是正常的。我正在开发自己的插件,当一个足球队/足球队被输入到一个框中时,它会检查它是否已经在数据库中。以下是我的代码行add_action( \'admin_footer\', \'fws_teamcheck_javascript\' ); function fws_teamcheck_javascript() { ?> <script type="text/javascript">