SQL Server PHP Code Igniter 显示一对多关系



我想显示来自table_one的数据,其中tableone_id包含在table_two中。这是一对多的关系。下面是示例。

table_one                table_two
id  | name               id  | name |tableone_id
1   |   A                1   |   C  |     1
2   |   B                2   |   D  |     1
                         3   |   E  |     2
                         4   |   F  |     2

我在PHP上期待的结果是..

Number  | Name | Linked Item |
  1     |  A   |    C        |
        |      |    D        |
  2     |  B   |    E        |
        |      |    F        |

我已经尝试了一些代码,例如

**Controller.php**
$head = $this->db->query("SELECT * from table_one)->result_array();
foreach($head as $key => $value)
{
   $head[$key]['items'] = $this->db->query("SELECT
   a.id,
   b.id,
   b.name as tabletwo_name,
   FROM table_one a
   JOIN table_two b on a.id = b.id
   where b.id =".$value['id'])->result_array();
}

做的代码失败了,我是如何为这种情况做正确的代码的?
谢谢<</p>

div class="one_answers">
  1. 数据库查询应位于模型中,而不是控制器中
  2. 您在第一个选择中缺少双引号,您的字符串未关闭
  3. 为什么要从table_one中选择所有结果,然后执行 JOINed 选择?您甚至没有选择要在输出中包含的数据(如 table_two.name(。

将第一个查询更改为:

$this->db->query("SELECT table_one.id as number, table_one.name as name, table_two.name as linked_item FROM table_one LEFT JOIN table_two ON table_one.id = table_two.tableone_id")->result_array();

然后就这样做:

foreach($head as $key => $value)
{
   $head[$key]['items'] = $value;
}

试试这个,嗯,我还没有测试过这个,但你可以

   $this->db->select('table_one.name AS t1,table_two.name AS t2');
            $this->db->join('table_two', 'table_two.tableone_id=table_one.id');
            $rs = $this->db->get('table_one');
            $count = 1;
            $data  = array();
            foreach ($rs->result() as $key => $value)
            {
                    $data[] = array(
                        'number'      => $count ++,
                        'name'        => $value['t1'],
                        'linked_item' => $value['t2']
                    );
            }
            print_r($data);
控制器

用于在代码点火器中模型和视图之间进行通信。 因此,您的数据库查询应该在模型中。

根据您的查询创建一个模型,也许您可以尝试这样做:

function something(){
   $qry = 'a.* , b.tableone_id';
   $this->db->select($qry);
   $this->db->from('table_one as a');
   $this->db->join('table_two b', 'b.tableone_id = a.id', 'left');
   $q = $this->db->get();
   return $q;
}

也尝试点击此链接以获取有关 CI 中数据库引用的更多参考:https://www.codeigniter.com/userguide3/database/query_builder.html

最新更新