2015-05-01 117 views
-1

我有一种情况,我需要从7个不同的表中获取数据,以执行特定的处理。如何使用CodeIgniter中的单个查询从多个表中获取结果?

我将需要7个简单的SELECT所有语句,没有什么奇特的。但为了最小化数据库命中,我非常希望将这些查询绑定到1或2个查询中。

像:

select * from table1; select * from table2; select * from table3;. 

并呼吁从我的代码此查询。在.net的DataSet的类似的行中可以得到结果。我正在寻找核心PHP或CodeIgniter的解决方案。我正在使用PDO进行数据库连接。

PS:表格有不同的模式,没有共同点。因此,加入或联合的任何解决方案都不起作用。

$results = $this->db-query("select * from tb1; select * from tb2"); 

现在$result[0]应该有所有的记录从TB1和$results[1]应该从TB2有记录。

在这种情况下,类似行上的东西将最有帮助。

+0

你没有提供的表结构也没有实际的代码。请更新您的问题。这是CodeIgnitEr而不是CodeIgnitor。 – kidA

+0

我不需要为您提供任何代码,因为它不是我编码并被卡住的东西。这只是一个在.NET中很容易处理的情况,但我无法在php中找到解决方案。 –

+0

使用联合查询获取所有表数据 – Saty

回答

0

调查InnerJoin。这就是你如何进行多重选择一次 - 假设你有一个共同的数据点

+0

没有共同点。我只是想要连接2个或更多select语句并试图将结果转换为一个数组数组。 –

+0

那么详细定义所有字段呢? SELECT aa,ab,za,zb FROM c AS a,y AS z - AS是一个额外的,你可能甚至不需要...这应该工作,但我从来没有尝试过它超过2个表... –

0

你需要的是UNION

$this->db->query('SELECT column_name(s) FROM table_name1 UNION ALL SELECT column_name(s) FROM table_name2'); 

UNION ALL这是UNION关键字,以及可选的ALL关键字。 UNION表示UNION之前的SELECT语句的结果将与UNION后面的SELECT语句的结果组合在一起。

当您使用ALL关键字时,不会从联合产生的组合集中删除重复的行。这可以显着提高查询的性能,因为Access不必检查重复行的结果。

  • 你确信选择查询不会产生任何 重复行:如果任何下列条件为真,应该使用ALL关键字。

  • 如果结果有重复的行,这并不重要。

  • 你想查看重复的行。

EDITED

您的版本和我所得到它从你的问题那么这可能会有帮助后。你需要循环,查询得到的results数组作为

$tablename = array('name1','name2','name3','name4','name5','name6','name7'); 
$results = array(); 
foreach($tablename as $key => $value){ 
    $results[$key] = $this->db->query("select * from ".$value."")->result_array(); 
} 
+0

问题是所有表格都有不同的模式,所以在这种情况下不能使用联合。我会更新我的问题来强调这个事实。 –

+0

然后对您的问题进行更新,以便更好地理解您的问题。 –

+0

@vishwajeetkumar查看我的更新回答 –

0

多重选择查询在codigniter

$this->db->select('t1.*, t2.*'); 
$this->db->from('table1 AS t1, table2 AS t2'); 
$query = $this->db->get(); 
$row = $query->result_array(); 
print_r($row); 
+0

这不会导致他们的笛卡儿积?即如果每个表格中有三行,则会返回九行? – halfer

+0

这会撞击数据库一次还是两次?来自不同表格的记录是否可用于不同的结果集?我对此表示怀疑。 –

+0

这将打击一次数据库,并让您获得所有表格结果 – Saty

相关问题