一页上有多个MySQL查询(WordPress)

时间:2017-07-19 16:41:58

标签: php mysql wordpress

我目前在WordPress网站上运行以下查询:

PHP:

function get_details($key, $post_id)  { 
    global $wpdb;
    $values = $wpdb->get_results( "SELECT meta_value FROM {$wpdb->prefix}new_post_meta WHERE meta_key = '{$key}' AND post_id = '{$post_id}' LIMIT 1" );
    return $values[0]->meta_value;
}

ON PAGE:

<?php echo get_details('facebook_url', $post_id); ?>

这是一个新的自定义表,其工作方式与WP po​​st meta相同。

这在页面上运行了20多次,所以我想知道是否有更好的方法来做到这一点?

目前在数据库中直接运行查询需要0.5128秒,数据库表的大小为36MB。

查询确实减慢了网站的速度。

1 个答案:

答案 0 :(得分:0)

感谢影子陈述显而易见的但是有效:

public function get_meta_data() {
    $meta_keys = array(
//META KEYS GO HERE IN ARRAY
    );
    $mks = implode("', '", $meta_keys);

    //Get Results
    global $wpdb;
    $results = $wpdb->get_results( "SELECT meta_key, meta_value FROM {$wpdb->prefix}resorts_meta WHERE meta_key IN ('{$mks}') AND post_id = '{$this->id}'", OBJECT_K );

    foreach($results as $key => $value) {
      $this->$key = $value->meta_value;
    }

    return "SELECT meta_key, meta_value FROM {$wpdb->prefix}new_post_meta WHERE meta_key IN ('{$mks}') AND post_id = '{$this->id}'";

然后我创建了一个函数来显示$ this-&gt;变量中的结果,如下所示:

public function get_meta( $key ) { return $this->$key; }

然后将get_meta_data存储在构造函数中。

谢谢Shadow。