gpt4 book ai didi

php - WordPress 查询自定义字段和类别

转载 作者:行者123 更新时间:2023-11-29 15:01:42 25 4
gpt4 key购买 nike

我有一个查询创建一个 TableView ,然后另一个查询创建该 View 。结果极其缓慢。这是代码:

create or replace view $view_table_name as select * from wp_2_postmeta where post_id IN (                           
select ID FROM wp_2_posts wposts
LEFT JOIN wp_2_term_relationships ON (wposts.ID = wp_2_term_relationships.object_id)
LEFT JOIN wp_2_term_taxonomy ON (wp_2_term_relationships.term_taxonomy_id = wp_2_term_taxonomy.term_taxonomy_id)
WHERE wp_2_term_taxonomy.taxonomy = 'category'
AND wp_2_term_taxonomy.parent = $cat || wp_2_term_taxonomy.term_id = $cat
AND wposts.post_status = 'publish'
AND wposts.post_type = 'post')

已将 $values 放入此示例中,用于查询 View 表以获取结果。

select distinct(ID)
FROM $view_table_name wposts
LEFT JOIN wp_2_postmeta wpostmeta
ON wposts.ID = wpostmeta.post_id
WHERE post_status = 'publish'
AND ID NOT IN (SELECT post_id
FROM wp_2_postmeta
WHERE meta_key = '$var' && meta_value = '$value1')
AND ID NOT IN (SELECT post_id
FROM wp_2_postmeta
WHERE meta_key = '$var' && meta_value = '$value2')
AND ID NOT IN (SELECT post_id
FROM wp_2_postmeta
WHERE meta_key = '$var' && meta_value = '$value3')
AND postmeta.meta_key = 'pd_form'
ORDER BY CASE wpostmeta.meta_value
WHEN '$value5' THEN 1
WHEN '$value6' THEN 2
WHEN '$value7' THEN 3
WHEN '$value8' THEN 4
WHEN '$value9' THEN 5
WHEN '$value10' THEN 6
WHEN '$value11' THEN 7
WHEN '$value11' THEN 8
END;

最佳答案

这里的主要问题是 IN 条件下的子查询。 MySQL 不是先执行子查询,然后在外表中检查对应关系,而是将查询转换为相关子查询,对外表中的每一行执行该子查询。

通常的解决方案是删除 IN 中的子查询,转而使用 JOIN。

另一个问题是你使用了OUTER JOIN而不是inner JOIN,尽管你实际上并不需要它(MySQL通常足够聪明,可以在它是微不足道的时候对其进行优化,但无论如何你应该更清楚地表达你的意图)。

还有一件事。这两个查询似乎都是动态生成的。除了优化查询本身之外,还应该考虑如何不破坏调用代码。但这可能很棘手。

优化 WordPress 始终是一个有趣的挑战。

关于php - WordPress 查询自定义字段和类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2925324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com