使用join(codeigniter)从单个字段中的逗号分隔符后检索和打印值

时间:2014-01-02 07:29:04

标签: php mysql sql codeigniter select

使用codeigniter从mysql中检索值时遇到一个问题。

我有一个表名任务,其中有一个assigneduserid字段。

表格 - 任务:

id  | title     | assigneduserid
-------------------------------------
1   | Workspace | 23,21

表格 - 用户

id  | title 
-----------------
23  | Ashish
21  | Ritesh

在assigneduserid字段中,该字段中有两个值为23,21。

我想打印这样的用户标题: Ashish,Ritesh 来自usertable使用该assigneduserid。

此外,我还希望按 assigneduseid

中的升序设置该值

我正在尝试使用echo跟随

在页面上打印该记录

以下是我正在打印的代码:

<?php echo $task_row->usertitle;?>

以上代码仅打印 Ashish

但我想打印 Ashish,Ritesh

以下是我的模特。

function getTask($id, $is_master_admin) 
        {
         $this->db->select('workspace.title as workspacetitle, user.title as usertitle,task.*');
        $this->db->join(WORKSPACE, WORKSPACE . '.id = ' . TASK . '.workspaceid', 'inner');
        $this->db->join(USER, USER . '.id = ' . TASK . '.assigneduserid', 'inner');
        $this->db->from(TASK);
        if (!$is_master_admin) {
            $this->db->where(USER . '.id', $id);
        }
        $this->db->where(TASK . '.tasktypeid', '1');
        $query = $this->db->get();
        if ($query->num_rows() > 0) {
            return $query->result();
        } else {
            return false;
        }
    }

先谢谢你

3 个答案:

答案 0 :(得分:2)

使用此

function getTask($id, $is_master_admin)
{

$this->db->select('task.*, workspace.title as workspacetitle, GROUP_CONCAT( user.title ) AS usertitle,task.assigneduserid,user.id',FALSE);
$this->db->join(WORKSPACE , WORKSPACE . '.id = ' . TASK . '.workspaceid', 'inner');
$this->db->join(USER,("FIND_IN_SET(USER .id , TASK.assigneduserid)"), 'inner');
$this->db->from(TASK);
$this->db->group_by("task.id");
if (!$is_master_admin)
{

$this->db->where ("FIND_IN_SET($id, task.assigneduserid)");
}
$this->db->where(TASK . '.tasktypeid', '1');
$query = $this->db->get();

if ($query->num_rows() > 0) {
return $query->result();
} else {
return false;
}

}

答案 1 :(得分:1)

使用FIND_IN_SET()&amp; GROUP_CONCAT()函数

试试这个:

SELECT t.id, t.title, GROUP_CONCAT(u.title) AS userTitle
FROM Task t 
INNER JOIN User u ON FIND_IN_SET(t.assigneduserid, u.id) 
GROUP BY t.id

修改::

SELECT t.id, t.title, GROUP_CONCAT(u.title) AS userTitle
FROM Task t 
INNER JOIN `User` u ON CONCAT(',', t.assigneduserid, ',') LIKE ('%,', u.id, ',%')
GROUP BY t.id

答案 2 :(得分:0)

@Ritesh:关注Saharsh Shah,您可以将此查询放入此命令$ this-&gt; db-&gt; query();或者您可以点击此链接执行您想要的活动http://ellislab.com/codeigniter/user-guide/database/active_record.html