【问题标题】:SQL Server PHP Code Igniter show one to many relationshipSQL Server PHP Code Igniter 显示一对多关系
【发布时间】:2017-03-31 17:43:35
【问题描述】:

我想显示来自 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();
}

我制作的代码失败了。我是如何为这种情况做正确的代码的?
谢谢

【问题讨论】:

  • 去找文档哥们,你真的误会了sql。

标签: php sql-server codeigniter


【解决方案1】:
  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;
}

【讨论】:

    【解决方案2】:

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

       $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);
    

    【讨论】:

      【解决方案3】:

      控制器用于在codeigniter中的模型和视图之间进行通信。所以你的数据库查询应该在模型中。

      根据您的查询制作模型,也许您可​​以这样尝试:

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-04
        • 1970-01-01
        • 2013-01-26
        • 1970-01-01
        相关资源
        最近更新 更多