Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php wordpress查询自定义字段和类别_Php_Mysql_Wordpress - Fatal编程技术网

Php wordpress查询自定义字段和类别

Php wordpress查询自定义字段和类别,php,mysql,wordpress,Php,Mysql,Wordpress,我有一个查询创建一个表视图,然后另一个查询该视图。结果非常缓慢。 代码如下: 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 JOI

我有一个查询创建一个表视图,然后另一个查询该视图。结果非常缓慢。 代码如下:

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')
在本例中,$值用于查询视图表中的结果

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;

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

通常的解决方案是在中去掉
中的子查询,而使用连接

另一个问题是使用
外部连接
而不是内部连接
,尽管您实际上并不需要它(MySQL通常很聪明,可以在它很小的时候对其进行优化,但无论如何,您应该更清楚地表达您的意图)

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

优化wordpress总是一个有趣的挑战