首先,这是一个想法,需要分享,因为我的解决方案不存在。但如果适用,它也可以帮助许多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中存在这样的函数获取参数。有什么想法吗?
答案 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)) . ')';