如何使用foreach循环进入另一个foreach循环来遍历c​​odeigniter中的两个不同的数据表?

Posted

技术标签:

【中文标题】如何使用foreach循环进入另一个foreach循环来遍历c​​odeigniter中的两个不同的数据表?【英文标题】:how to use foreach loop into another foreach loop to traverse two different datatables in codeigniter? 【发布时间】:2017-06-08 00:10:03 【问题描述】:

是否可以在foreach循环中使用foreach循环遍历两个不同的数据库表得到结果?

我想向其用户和客户显示 admin_1 插入的产品列表? 我将产品和用户保存在两个不同的表中。我使用 admin_id 来区分产品和用户。 但我不知道如何获得准确的结果。 任何帮助表示赞赏。

这是我的代码:

<?php if (!empty($products))  ?>
                    <?php foreach ($products as $product)  ?>

                        <?php if((($this->session->userdata('user_id')) == ($product->id_admin)) || (userdata('department') == 0 ))  ?>

【问题讨论】:

可以。但是您提供的代码和信息不足以帮助您。 请给出任何一般性的例子来做到这一点。因为我输入了我的代码,而我在该代码中完成了其他工作。 print_r($products) 发布您的输出。 Array ( [0] => stdClass Object ( [product_id] => 14 [id_admin] => 7 [title] => Array [icon] => e44277435e318a7aa8b0c4d7169bfc2b.jpg [description] => Array [价格] => 123.00 [链接] => [排序顺序] => 0))bool(true) 这是一个非常糟糕的问题。 【参考方案1】:

如果您想合并两个不同表的结果,解决方案总是使用 UNION。见https://dev.mysql.com/doc/refman/5.7/en/union.html

这是一个简单的 UNION 示例,适用于您的案例:

<?php

public function retrieve_products_users_by_username($this_user)  // place this function into your model
    $this->db->where('username',$this_user);
    $this->db->select('id');
    $this->db->limit(1);
    $query_for_this_user = $this->db->get('users'); // whatever table you store the admin_1
    $this_user_id = $query_for_this_user->row_array()['id'];

    $this->db->select('products.id_admin as id_admin ,products.title as column1, products.icon as column2, products.descrption as column3 ...');
    $this->db->from('products');
    $products_query = $this->db->get_compiled_select();

    $this->db->select('users.id_admin as id_admin ,users.username as column1, users.profile_picture as column2, users.address as column3 ...');
    $this->db->from('users');
    $users_query = $this->db->get_compiled_select();

    $query = $this->db->query('SELECT * FROM (' . $products_query . ' UNION ' . $users_query . ') AS u WHERE u.id_admin='.$this_user_id);
    return $query->result_array();


?>

我使用您在问题和 cmets 中提供的有限信息来编写此函数。根据您的表列名称等,实际情况可能会有所不同。

无论如何,当您在模型中完全准备好这个函数时,您可以像这样从控制器调用它:

<?php

$this->data['results'] = $this->YOURMODELNAME_model->retrieve_products_users_by_username('admin_1');

?>

正如我所说,UNION 是您的解决方案。 JOIN 不是您的解决方案,因为:

JOIN 简单地将两个表水平连接 UNION 简单地将两个表垂直连接起来

【讨论】:

以上是关于如何使用foreach循环进入另一个foreach循环来遍历c​​odeigniter中的两个不同的数据表?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 的 ForEach 循环中增加状态?

如何在 forEach 循环中使用 offset().top

无法在另一个 foreach mysql C# 中的 foreach 循环中获取 Last_inserted_id

如何在foreach循环中将数组结果组合在php中

转到 JavaScript forEach 循环中的“下一个”迭代 [重复]

php 如何退出foreach 循环