php - 获取存储为数组的值

标签 php mysql arrays codeigniter-2

我有两个表,即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_id,那么也只显示一个值。 这是我使用的代码,我的 View 如下所示,我只显示了代码中受影响的部分

<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>

这是我的 Controller

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_id 11355并且7 分别为 2 但结果是这样的 537511 > 是 2 得到的结果如下 Valid XHTML http://spdc.in/demo/spectra/spectra_tool.PNG .

最佳答案

我会放弃 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();
}

关于php - 获取存储为数组的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41295816/

相关文章:

javascript - PHP 与 JavaScript : Altering the value of an array passed in gives different results

mysql - 是否有 "best way"来短路 mysql 查询

java - 在 Java 中构造时设置数组值

javascript - 如何在 Sweet Alert 2 Promise 中传递数组

php - 从jQuery将日期插入mysql数据库

javascript - 通过 AJAX 发送表格/网格对象

php - 我可以在 wordpress 主题功能中创建自己的 PHP 类吗?

mysql - 如何自定义插入数据?

python - Python Django 中的 ORM 数据建模

c - 如何在c中查找包含多个asci 0值字符的字符数组的长度