这个元查询有问题吗?

时间:2021-10-21 作者:oguz463

我有两个复选框,用于确定活动的最小和最大人员容量范围。例如:0到100、100到200,依此类推。我需要用元查询过滤它们,但目前它似乎不起作用。

array (
  \'sort_0\' => 
  array (
    \'key\' => \'_featured\',
    \'type\' => \'CHAR\',
  ),
  \'sort_1\' => 
  array (
    \'key\' => \'_claimed\',
    \'type\' => \'CHAR\',
  ),
  0 => 
  array (
    \'key\' => \'_min_acik_davet_alani\',
    \'value\' => 
    array (
      0 => \'\',
    ),
    \'compare\' => \'NOT IN\',
  ),
  1 => 
  array (
    \'key\' => \'_max_acik_davet_alani\',
    \'value\' => 
    array (
      0 => \'\',
    ),
    \'compare\' => \'NOT IN\',
  ),
  2 => 
  array (
    \'relation\' => \'OR\',
    0 => 
    array (
      0 => 
      array (
        \'key\' => \'_min_kapali_davet_alani\',
        \'value\' => 100,
        \'type\' => \'NUMERIC\',
        \'compare\' => \'>=\',
      ),
      1 => 
      array (
        \'key\' => \'_max_kapali_davet_alani\',
        \'value\' => 200,
        \'type\' => \'NUMERIC\',
        \'compare\' => \'<=\',
      ),
    ),
    1 => 
    array (
      0 => 
      array (
        \'key\' => \'_min_kapali_davet_alani\',
        \'value\' => 200,
        \'type\' => \'NUMERIC\',
        \'compare\' => \'>=\',
      ),
      1 => 
      array (
        \'key\' => \'_max_kapali_davet_alani\',
        \'value\' => 300,
        \'type\' => \'NUMERIC\',
        \'compare\' => \'<=\',
      ),
    ),
    2 => 
    array (
      0 => 
      array (
        \'key\' => \'_min_kapali_davet_alani\',
        \'value\' => 300,
        \'type\' => \'NUMERIC\',
        \'compare\' => \'>=\',
      ),
      1 => 
      array (
        \'key\' => \'_max_kapali_davet_alani\',
        \'value\' => 400,
        \'type\' => \'NUMERIC\',
        \'compare\' => \'<=\',
      ),
    ),
  ),
)
这是;meta\\u键;输入Wp\\U查询参数。我尝试过滤此阵列的2个索引中的容量,可以同时选择0-100和300-400。考虑到未选择200-300。目前它不起作用。实际上,它在本地返回504错误,mysql过载并失败。我做错什么了吗?

1 个回复
SO网友:HU ist Sebastian

简单的回答是:大型元查询非常糟糕,可能会很快导致MySQL服务器不再响应。您应该尝试重新编写meta\\u查询,使其没有那么多子句。

答案很长:Wordpress Post元数据在查询时的存储效率非常低。最好的建议是永远不要将需要查询的数据存储到post\\u meta中,但这几乎是不可能的。

使用大型元查询时会发生以下情况:创建的SQL LEFT将post\\u元数据库表中的每个子句连接到posts表。这意味着在你的情况下,你至少有10个左连接。MySQL服务器可能处于计算阶段,试图找到将所有这些数据连接到一个视图的最佳方法。

你现在该怎么办?正如雅各布·皮蒂(JacobPeattie)所说,你首先应该返工;“特色”;和;“索赔”;进入某种分类法。

接下来,您可以尝试加快这里所写的Posteta表的速度:(只有在熟悉MySQL数据库的情况下才可以这样做)http://mysql.rjweb.org/doc.php/index_cookbook_mysql#speeding_up_wp_postmeta

这应该可以减轻MySQL服务器的压力。

但是,您确实应该考虑更改要进行的查询的类型。也许您可以将“\\u min\\u kapali\\u davet\\u alani”和“\\u max\\u kapali\\u davet\\u alani”修改为一个元键?以便您可以使用;“之间”;元查询条件?我不太清楚你的网站是做什么的,所以很难找到好的变化。

如果没有任何帮助,您可以尝试使用$wpdb进行直接数据库查询,以获取单个查询的结果(如“100到200”、“200到300”等),然后比较结果并给出您想要直接查询到的帖子;post\\u in“中”;参数

快乐的编码!

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post