$wpdb->Query()与$wpdb->Get_Results()与phpMyAdmin

时间:2019-08-02 作者:Justin J James

我有以下代码:

$query = "SELECT * 
            FROM $wpdb->posts
                INNER JOIN $wpdb->postmeta 
                    ON $wpdb->posts.ID = $wpdb->postmeta.post_id
                INNER JOIN $wpdb->term_relationships 
                    ON $wpdb->posts.ID = $wpdb->term_relationships.object_id
            WHERE ((post_type = \'projects\') OR (post_type = \'post_cost_codes\'));";

$results = $wpdb->query($query); // Takes 1.5 seconds
我也试过:

$query = "SELECT * 
            FROM $wpdb->posts
                INNER JOIN $wpdb->postmeta 
                    ON $wpdb->posts.ID = $wpdb->postmeta.post_id
                INNER JOIN $wpdb->term_relationships 
                    ON $wpdb->posts.ID = $wpdb->term_relationships.object_id
            WHERE ((post_type = \'projects\') OR (post_type = \'post_cost_codes\'));";

$results = $wpdb->get_results($query); // Still takes 1.5 seconds
但当我抓取查询并将其放入phpmyadmin时:

(18588 total, Query took 0.0102 seconds.)
SELECT * FROM wp_dev_posts, wp_dev_postmeta, wp_dev_term_relationships WHERE ((post_type = \'projects\') OR (post_type = \'post_cost_codes\')) AND (wp_dev_posts.ID = wp_dev_postmeta.post_id) AND (wp_dev_posts.ID = wp_dev_term_relationships.object_id)
// Takes 0.0102 seconds
为什么两种$wpdb方法都要花这么多时间?将同一查询直接复制并粘贴到phpmyadmin上,这将花费预期的时间。

2 个回复
SO网友:butlerblog

差异是返回的内容。

WPDBquery() 方法返回true 对于CREATE、ALTER、TRUNCATE和DROP查询,是所有其他查询的结果数的整数,或者false 如果有错误。

WPDBget_results() 方法实际上返回查询的整个结果(就像在phpMyAdmin中运行查询一样)。可以将结果作为数组或对象返回,具体取决于使用结果的方式。

SO网友:Justin J James

运气不好,我使用get\\u transient(…)解决了自己的问题和set\\u transient(…)

注意,这是一个仅限wordpress的修复程序。我还是会第一个打电话给这个必须忍受痛苦的人。

在我的情况下,这是可以接受的,因为我可以将结果存储一整天。即使12个小时对我来说也没问题。我仍然在寻找原始问题的答案,因为我很好奇到底出了什么问题。