如何在codeigniter中使用两个不同的表只显示一次数据

Posted

技术标签:

【中文标题】如何在codeigniter中使用两个不同的表只显示一次数据【英文标题】:How to display data only once by using two different tables in codeigniter 【发布时间】:2019-04-13 19:39:24 【问题描述】:

我正在准备注册从日期和至今的输入...显示用户从日期和至今所做的条目...我想显示凭证编号、账单日期、数量、金额(出现在购买账单中表)和产品名称(存在于purchaseitem表中)我想根据账单在同一行打印产品名称..(为此我使用组连接)...我的问题是所有数据都显示多次..我不知道我的代码中的错误在哪里..必须对我的代码进行哪些更改才能仅显示一次数据..下面我附上了我的代码..帮助我

控制器代码:

$this->db->where('date >=', $newDate);
        $this->db->where('date <=', $newDate2);
        $this->db->select('*');
        $this->db->from('purchasebill');
        $this->db->order_by("voucherno", "asc");
        $this->db->join('parmaster','parmaster.Pcode = purchasebill.partyname','left outer');
        $this->db->select('GROUP_CONCAT(Prdtname)as itemname',false);
        $this->db->order_by('vno','asc');
        $this->db->group_by('vno,billno');
    $this->db->from('purchaseitem');


    $query = $this->db->get('')->result_array();    
    $data ['query']= $query;

查看代码:

  <?php $rowcount = 1 ?>                            
                                <?php foreach ($query as $row): ?>

                                        <tr>
                                            <td><?=$rowcount;?></td>
                                            <td><?=$row['voucherno'];?></td>
                                            <td><?=$row['date'];?></td>
                                            <td><?=$row['PName'];?></td>
                                            <td><?=$row['sqty'];?></td>
                                            <td><?=$row['billtot'];?></td>
                                            <td><?=$row['itemname'];?></td>
                                            <?php $rowcount +=1?>
                                            <br>
                                            <?php endforeach ?> 
                                        </tr>

我认为数据打印了多次,因为我使用了两个查询但传递了同一个变量 $data..是否有可能在同一个视图页面上加载多个查询结果..???

【问题讨论】:

您能说明如何将 $data 数组传递给视图以及您的视图代码吗? 是的,当然...检查我编辑的帖子 好的,您的视图看起来不错。我几乎完全确定问题出在查询中,您是否在 PhpMyAdmin 或类似网站上尝试过查询?在$query = $this-&gt;db-&gt;get('')-&gt;result_array(); 行之后使用echo $this-&gt;db-&gt;last_query();,然后复制该行并直接在数据库上尝试,您可能会在那里得到重复的行。 是的先生..我在 phpmy admin 中尝试了 groupconcat 它工作正常..是否有可能在同一个视图页面上加载两个查询结果,因为对于两个表我都使用 $query并将其传递给数据 现在我看到了,您的 sql 查询生成器看起来有问题,有 2 个选择并且没有明确的方法来说明它们应该如何执行。您可以完全分离这些查询,但首先让我们确保您找到正确的 SQL 查询。 purchasebill 如何与purchaseitem 链接。 【参考方案1】:
$this->db->where('date >=', $newDate);
    $this->db->where('date <=', $newDate2);
    $this->db->select('purchasebill.*,GROUP_CONCAT(parmaster.Prdtname)as itemname');
    $this->db->from('purchasebill');
    $this->db->join('parmaster','parmaster.Pcode = purchasebill.partyname','left outer');
    $this->db->order_by('vno','asc');
    $this->db->group_by('vno,billno');


$query = $this->db->get()->result_array();    
$data ['query']= $query;

【讨论】:

得到这个错误不是唯一的表/别名:'purchasebill' SELECT purchaseitem.*, GROUP_CONCAT(parmaster.Prdtname)as itemname FROM (purchasebill) LEFT OUTER JOIN parmaster ON @987654325 @.Pcode = purchasebill.partyname 左外连接 purchasebill ON purchasebill.date = purchaseitem.billdate WHERE date >= '2018 987654335@ vno, billno ORDER BY vno asc【参考方案2】:

是的,您可以执行不同的查询并将它们单独传递给视图:

$this->db->select('*');
$this->db->from('purchasebill');
$this->db->where('date >=', $newDate);
$this->db->where('date <=', $newDate2);
$this->db->order_by("voucherno", "asc");
$this->db->join('parmaster','parmaster.Pcode = purchasebill.partyname','left outer');
$query1 = $this->db->get()->result_array();

$this->db->select('GROUP_CONCAT(Prdtname) AS itemname',false);
$this->db->order_by('vno','asc');
$this->db->group_by('vno,billno');
$this->db->from('purchaseitem');
$query2 = $this->db->get()->result_array();  

$data['bills']= $query1;
$data['items']= $query2;

$this->load->view('your_view_path', $data);

然后在您的视图中,您可以访问$bills$items 中的数据。我的建议是,您可以尝试并创建一个包含所有信息的查询。

【讨论】:

出现错误..未定义的变量 query1 和为每个提供的无效参数 我试图通过一个查询来实现这一点,但我不知道如何从两个不同的表中获取两个数据.. 如果您收到未定义的查询 1,您需要调试返回给 $query1 的内容,您在哪里收到此错误?在你看来? 我在我的视图页面中什么也没有得到......它只是向我显示错误未定义变量 query1 和查询 2..我在页面末尾计算总计......我得到了总计和我的视图页面中的错误 您是否在视图中使用$query1$query2?您应该使用$bills$items

以上是关于如何在codeigniter中使用两个不同的表只显示一次数据的主要内容,如果未能解决你的问题,请参考以下文章

如何查询拆分为 2 个较小表的表?联盟?看法?

使用 PHP/CodeIgniter 从具有多对多关系的两个表中显示数据

消息:未定义的索引:获取列名时(两个具有相同列的表)Codeigniter

SQL Join 在两个表上的 Codeigniter 中?

使用 Codeigniter 搜索表单

Codeigniter - 使用两个不同数据库的最佳方式