【问题标题】:Fetching values stored as an array获取存储为数组的值
【发布时间】:2016-12-29 13:24:13
【问题描述】:

我有两张桌子,即tbl_toolstbl_tool_usetbl_tool_use 表是这样的

id  user_id     type    tool_id     quantity    start_date  end_date
30  27         engineer     5          2        2016-12-22  
31  gdf         team        8          2        2016-12-22  
32  26         engineer     7          2        2016-12-22  
33  26         engineer     7          2        2016-12-23  
34  hamsu       team        6          2        2016-12-22  
35  27        engineer      7,5        2,2      2016-12-22  

tbl_tools 表是这样的

id  name            quantity    available   type        
5   cutting player     5          5        engineer     
6   reflectors         2          2        team     
7   spanner            8          8        engineer     
8   tester             4          4        team     

我希望我的结果是这样的:

id  user_id     type       tool_id             quantity     start_date  end_date
30  27         engineer  cutting player            2        2016-12-22  
31  gdf         team     tester                    2        2016-12-22  
32  26         engineer  spanner                   2        2016-12-22  
33  26         engineer  spanner                   2        2016-12-23  
34  hamsu       team     reflectors                2        2016-12-22  
35  27        engineer   cutting player,spanner    2,2      2016-12-22  

但我会变成这样

 id user_id     type       tool_id             quantity     start_date  end_date
30  27         engineer  cutting player            2        2016-12-22  
31  gdf         team     tester                    2        2016-12-22  
32  26         engineer  spanner                   2        2016-12-22  
33  26         engineer  spanner                   2        2016-12-23  
34  hamsu       team     reflectors                2        2016-12-22  
35  27        engineer   cutting player            2,2      2016-12-22 

如果我选择了更多tool_ids,那么也只会显示一个值。 这是我使用的代码,我的视图是这样的,我只显示了代码中受影响的部分

<tbody>
    <?php $n=1;

        foreach($all_assign_tool_info as $row) {                              
            $t=explode(',',$row->tool_id);
            foreach($tools as $res) {
                foreach($t as $res1) {
                    if($res1==$res->id) {
                        $tool=$res->name;
                        //var_dump($tool);
                    }
                }
            }
        }                   

    ?>
    <tr>
        <td><?= $tool ?></td>
    </tr>
    <?php
    }?>
</tbody>

这是我的控制器

public function assign_tool($id = NULL)
{

    $data['all_assign_tool_info'] = $this->Tool_model->get_permission('tbl_tool_use');
    $data['tools']=$this->Tool_model->view_tools(null,null);
    $data['subview'] = $this->load->view('admin/tool/assign_tool',$data, TRUE);
    $this->load->view('admin/_layout_main', $data); //page load
}

我的模型是这样的

public function view_tools($limit,$offset)
{
    $this->db->order_by('id','desc');
    $query=$this->db->get('tbl_tools',$limit,$offset);
    return $query->result();
}

请帮我解决我的问题

这是新包含的代码 我的tbl_tool_use 表是这样的

id  user_id     type       tool_id     quantity    start_date  end_date
136  27         engineer    11,5,7      3,5,2      2016-12-22  

这意味着tool_id113557分别是2 但结果是这样的5375112 得到的结果如下 Valid XHTML http://spdc.in/demo/spectra/spectra_tool.PNG.

【问题讨论】:

  • 你已经在 foreach 循环之外打印了你的 = $tool ?> 。所以只显示一个值
  • 三个具有三个不同变量的 foreach?哪一个包含表格数据?打印该变量并向我们展示一些数据
  • &lt;tr&gt; &lt;td&gt;&lt;?= $tool ?&gt;&lt;/td&gt; &lt;/tr&gt;放在foreach里面
  • @Anant foreach($all_assign_tool_info as $row)包含tbl_tool_use的表数据,而这个foreach($tools as $res)包含表数据tbl_tools

标签: php mysql arrays codeigniter-2


【解决方案1】:

我会摒弃 PHP 中的迭代,而更多地专注于编写正确的 SQL 语法以获得您的结果。查看FIND_IN_SETJOINS 以完成这项工作。本质上,您想要的是在逗号分隔值上连接两个表。我会以这种方式重写您的 Codeigniter 模型:

public function view_tools($limit,$offset)
{
    $this->db->select('tu.*, GROUP_CONCAT(t.name ORDER BY t.id) as tool_id', FALSE);
    $this->db->from('tbl_tools t');
    $this->db->join('tbl_tools_use tu', 'FIND_IN_SET(t.id, tu.tool_id)', 'inner', FALSE);
    $this->db->group_by('tu.id');
    $this->db->order_by('tu.id','desc');
    $this->db->limit($limit);
    $this->db->offset($offset);
    $query = $this->db->get();
    return $query->result();
}

【讨论】:

  • 非常感谢,它工作正常,我怀疑我能否从我之前编写的代码中得到结果
  • 按表格顺序”是什么意思?
  • 如果tool_id 的顺序是 11,7,5 得到的结果是顺序 5,7,11
  • 我已经添加了有问题的细节,请看一下
  • 所以如果tbl_tool_use -&gt; tool_id的顺序是11,7,5,那么你的结果应该是11,7,5?换句话说,您希望顺序遵循列上的顺序?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-24
  • 1970-01-01
  • 2021-02-22
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多