我希望根据Codeigniter的经验和知识得到答案。 假设我在数据库中有10个表,我想在同一个控制器中同时查询10个表中的所有行。 有两种方法可以做到这一点,
案例01 - 使用如下的常见查询功能
控制器
sample_function(){
'table1_data' => $this->common_model->get_table( 'table1' ),
'table2_data' => $this->common_model->get_table( 'table2' ),
...
'table9_data' => $this->common_model->get_table( 'table9' ),
'table10_data' => $this->common_model->get_table( 'table10' )
}
然后在common_model
中function get_table( $table_name ){
$this->db->select()->from( $table_name );
$sql_stmt = $this->db->get();
return $sql_stmt->result();
}
所以在这种情况下,get_table( $table_name )
将运行10次。
案例02 - 为下面的每个10个表使用单独的函数,
控制器
sample_function(){
'table1_data' => $this->common_model->get_table1(),
'table2_data' => $this->common_model->get_table2(),
...
'table9_data' => $this->common_model->get_table9(),
'table10_data' => $this->common_model->get_table10()
}
这样common_model将是这样的,这里我们有10个函数不像在Case01中使用相同的函数
function get_table1()
{
$this->db->select()->from( 'table1' );
$sql_stmt = $this->db->get();
return $sql_stmt->result();
}
function get_table2()
{
$this->db->select()->from( 'table2' );
$sql_stmt = $this->db->get();
return $sql_stmt->result();
}
....
function get_table9()
{
$this->db->select()->from( 'table9' );
$sql_stmt = $this->db->get();
return $sql_stmt->result();
}
function get_table10()
{
$this->db->select()->from( 'table10' );
$sql_stmt = $this->db->get();
return $sql_stmt->result();
}
在这种情况下,10个单独的函数分别运行一次。
很明显,当我们考虑代码可用性时,Case 01是最好的,但是当我们考虑性能时,我的静止是
Codeigniter中哪一个是最好的案例?
说到案例01,get_table会同时运行还是一次运行?
这种情况最适合CI的表现吗?
Thnaks
答案 0 :(得分:2)
基于多年后端开发经验的猜测:两者都会同样快/慢地运行,具体取决于您在表中有多少行。
由于您已经拥有代码,只需尝试使用合适的基准测试。让这两个例程运行几千次并取平均值。
答案 1 :(得分:1)
- Codeigniter中哪一个是最好的案例?
醇>
第一种情况是最好的CI或任何其他情况,因为第二种情况是重复自己的完美例子。干嘛 - D on R epeat Y 我们自己。
- 说到案例01,get_table会同时运行还是一次运行?
醇>
一次一个。
- 这种情况对CI的表现最好吗?
醇>
@Joshua回答 - 这取决于桌子的大小。
以下内容并非真正的要求,但我无法自拔。 您可以使您的代码更简洁,更有效。
考虑这个sample_function()
public sample_function()
{
$data = array();
foreach(array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) as $n)
{
$table = "table".$n;
$data[$table."_data"] = $this->common_model->get_table($table);
}
return $data;
}
一小段代码返回一个包含表结果的漂亮数组。这是干的。
不使用查询生成器(QB)可以改进您的模型。 QB在某些情况下很方便 - 但不是在你出现的情况下。 QB对于这样一个简单的查询来说太过分了。使用QB意味着您执行大量代码,最终(并且几乎字面上)相当于$this->db->query('YOUR QUERY HERE');
考虑这个版本的get_table
function get_table($table_name)
{
$query = $this->db->query("select * from $table_name");
return $query->num_rows() > 0 ? $query->result() : NULL;
}
不可否认,这是对这种简单查询的“微优化”。但是,IMO更容易编写和阅读。