首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取存储为数组的值

获取存储为数组的值
EN

Stack Overflow用户
提问于 2016-12-23 05:45:02
回答 1查看 89关注 0票数 2

我有两张桌子,即tbl_toolstbl_tool_usetbl_tool_use表如下所示

代码语言:javascript
复制
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表如下所示

代码语言:javascript
复制
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     

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

代码语言:javascript
复制
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  

但会变成这样

代码语言:javascript
复制
 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_id,那么也只能显示一个值。下面是我使用的代码,我的视图如下所示,我只在代码中显示了受影响的部分

代码语言:javascript
复制
<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>

这是我的控制器

代码语言:javascript
复制
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
}

我的模特长得像这样

代码语言:javascript
复制
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表如下所示

代码语言:javascript
复制
id  user_id     type       tool_id     quantity    start_date  end_date
136  27         engineer    11,5,7      3,5,2      2016-12-22  

这意味着tool_id 1135572,但是得到的结果类似于5375112,得到的结果如下:http://spdc.in/demo/spectra/spectra_tool.PNG

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-23 06:53:04

我将不再使用PHP中的迭代,而是更多地关注编写正确的SQL语法以获得结果。研究一下FIND_IN_SETJOINS来实现这一目标。本质上,您想要的是将逗号分隔值上的两个表连接起来。我将以这样的方式重写您的Codeigniter模型:

代码语言:javascript
复制
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();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41295816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档