有没有办法将页面的独立功能组合成单个,并查询一次以分别分配获取的数据

时间:2014-01-20 14:39:46

标签: php mysql wordpress

首先,这是一个想法,需要分享,因为我的解决方案不存在。但如果适用,它也可以帮助许多PHP开发人员。

我正在开发一个WordPress广告管理器插件。非常简单的想法,将图像URL带入带有id的db,并获取URL并使用<img>标记显示它们。在我的节目广告功能中,我做了类似的事情:

<?php
function show_ad($id){
    global $wpdb;
    $table = $wpdb->prefix . "my_ad";

    $query = $wpdb->get_results(
        "SELECT *
            FROM $table
            WHERE id = $id;
            ");
   $output = echo '<img src="'. $query[0]->img_url .'"/>';
   return $output;
}
?>

广告可以通过以下任何方式展示:模板中的PHP函数(<?php show_ad($); ?>),短代码,补充工具栏小工具。在所有情况下,显示过程的图像都是相同的功能。

假设我有一个网站,我在插件数据库中添加了20个广告。现在我想将其中的10个显示在10个不同的地方,10个不同的<div> s。在同一页面。那么函数正在做什么,在10个不同的地方使用相同的函数意味着 10个单独的数据库查询。 10 db查询意味着10次命中db。

所以,我正在寻找一种方法将所有函数合并为一个并执行单个db查询来获取数据。我正在做类似以下的事情。假设我的页面中有10个不同的广告位:

<?php
// A TOTAL FICTIONOUS CODE BLOCK
if( function_in_this_page_exists( 'show_ad' ) ) {
   $function_array = make_them_array_with_vallues();

   //so function_array looks like: array( '2','4','1','5','8','10','15', ... )

   //execute the combined query function
   //and query the db once
   $query_result_array = combined_query_function();

   //so the $query_result_array looks like: array('2'=>'http://url2.com','4'=>'http://url4.com','1'=>'http://url1.com', ...)

   //now, distribute the data to the individual function where they are
   //by executing another function that distribute fetched data where their id belongs
   distribute_array_data_to_functions($query_result_array);
}
?>

虽然这是一个虚构的代码块,但是[如果可能],通过这种方式,一个简单的数据库查询可以代替所有单个查询。我不认为现在PHP中存在这样的函数获取参数。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

首先,您可以使用MySQL关键字IN来获取多个ID。

其次,只需按照您的想象为返回的数据集编写处理函数。 换句话说,构建内容,为每个ID插入图像URL。

之后,您可能会考虑缓存查询并缓存生成的内容。

$array_with_ids = array('1','2','3');

$sql = 'SELECT * 
      FROM `table` 
     WHERE `id` IN (' . implode(',', array_map('intval', $array)) . ')';