【问题标题】:Codeigniter SELECT from another table as an arrayCodeigniter SELECT 从另一个表作为数组
【发布时间】:2015-10-03 04:49:53
【问题描述】:

我希望我能分解一些功能并一直跳过运行多个查询。

现在,如果我在两个表之间有一个一对多的关系。 tbl_invoicestbl_invoice_items。对于特定订单,表 tbl_invoice_items 的每个项目都有不同的行。

是否可以通过 Codeigniter 的 SINGLE 查询从 tbl_invoices 和数组中的所有 tbl_invoice_items 中获取相同结果中的项目?

基本上加入以下查询

$this->db->select('*,tbl_invoices.id AS invoice_id');
$this->db->from('tbl_invoices');
$this->db->where('tbl_invoices.id',$invoice_id);
$data = $this->db->get();


$this->db->select('*');
$this->db->from('tbl_invoice_items');
$this->db->where('tbl_invoice_items.invoice_id',$invoice_id);
$this->db->join('tbl_products','tbl_products.id = tbl_invoice_items.item_id','left');
$data = $this->db->get();

还可以在一对一的关系表中将另一个表作为自定义变量返回吗? 就像是: SELECT tbl_clients.* AS client, tbl_invoices.* FROM...JOIN...WHERE...etc

【问题讨论】:

    标签: php mysql codeigniter


    【解决方案1】:

    解决方案是 3 表 sql 连接(回答您的主要问题)这是应该回答您的主要问题的 SQL 查询

    $queryStr = sprintf("SELECT * from tbl_invoices a 
        INNER JOIN tbl_invoice_items b using a.id = b.invoice_id
        INNER JOIN tbl_products c using c.id = b.item_id 
        WHERE a.id = '%s' ", $invoice_id);
    
    $query = $this->db->query($queryStr);
    

    【讨论】:

    • 我可以看到这是如何工作的,但是这样我会得到一个完整的数组作为回报,其中包含每个项目的发票信息,这会导致太多无用的信息。您认为这样做或运行一个额外的查询会更有效吗?
    • Teris - 我的 2 美分是 - 在今天的环境中,只有当它们影响您的应用程序性能时,这些选择才值得深思。你可以忽略额外的数据,在任何情况下你都不会“看到”。编写额外的查询是否会导致代码维护开销?希望这可以帮助您做出决定:)
    猜你喜欢
    • 2017-04-28
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 2016-07-30
    相关资源
    最近更新 更多