Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.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 有没有一种方法可以将页面的独立功能合并到单个查询和一次查询中,以单独分发获取的数据_Php_Mysql_Wordpress - Fatal编程技术网

Php 有没有一种方法可以将页面的独立功能合并到单个查询和一次查询中,以单独分发获取的数据

Php 有没有一种方法可以将页面的独立功能合并到单个查询和一次查询中,以单独分发获取的数据,php,mysql,wordpress,Php,Mysql,Wordpress,首先,这是一个想法,需要分享,因为它的解决方案没有呈现给我。但如果适用,它也可以帮助许多PHP开发人员 我正在开发WordPress广告管理器插件。非常简单的想法是,将一个带有id的图像URL放到db中,然后获取URL并用标记显示它们。在我的展示广告功能中,我做了如下操作: 广告可以通过以下任何方式显示:模板中的PHP函数、短代码、边栏小部件。在所有情况下,图像显示过程将是相同的功能 假设我有一个网站,在那里我在插件数据库中添加了20个广告。现在我想把其中的10个展示到10个不同的地方,10个不

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

我正在开发WordPress广告管理器插件。非常简单的想法是,将一个带有id的图像URL放到db中,然后获取URL并用标记显示它们。在我的展示广告功能中,我做了如下操作:

广告可以通过以下任何方式显示:模板中的PHP函数、短代码、边栏小部件。在所有情况下,图像显示过程将是相同的功能

假设我有一个网站,在那里我在插件数据库中添加了20个广告。现在我想把其中的10个展示到10个不同的地方,10个不同的s。在同一页上。因此,函数所做的是,在10个不同的位置使用相同的函数意味着10个单独的db查询。10db查询意味着对db的命中率是10倍

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

<?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;
}
?>

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

首先,您可以在中使用MySQL关键字来获取多个id

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

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

<?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);
}
?>

谢谢你的查询部分。但是我想你错过了另外两个部分:有没有一种方法可以将页面的独立功能组合成单个函数&分别分发获取的数据。好的。通过调用show_adid组合函数,然后将id存储到数组中。在页面的页脚上,调用get_all_ads,查询show_ad的所有存储ID。下一部分:get_all_ads返回mysql结果集。再次使用ids数组对其进行迭代并生成内容。现在,您需要插入该内容,使用带有占位符的缓冲页面替换ad_占位符_id,这可能会执行方法insertAd。然后将整个页面呈现到浏览器中。谢谢。我知道你的答案了。但我不能理解全部。可能是因为我缺乏PHP知识。我将与PHP开发人员讨论这个问题,并给出您的答案。让我看看……请随便问!我将对此进行详细阐述,也许这会有所帮助:策略是首先缓冲ID,直到您拥有所有ID。然后您将使用它们执行mysql请求。之后,您将处理mysql结果以生成内容。然后通过简单的字符串替换将此内容插入页面。此策略还允许将mysql请求与缓存层请求交换。最好不要误用注释区域。如果您认为有什么可以更详细地提供问题的答案,您可以通过编辑将其添加到答案中。感谢你们的帮助,以及对这个想法的兴趣。我很感激。我很想向你学习这项技术不要担心这种预优化,因为这样做很可能只会节省协议开销,只会使代码的其余部分变得复杂。
$array_with_ids = array('1','2','3');

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