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

Posted

技术标签:

【中文标题】使用连接(codeigniter)从单个字段中检索和打印逗号分隔符后的值【英文标题】:retrieve and print values after comma separator from single field using join (codeigniter) 【发布时间】:2014-01-19 15:03:34 【问题描述】:

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

我有一个表名任务,其中有一个分配用户ID的字段。

表格 - 任务:

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

表格 - 用户

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

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

我想像这样打印两个用户标题:Ashish,Ritesh from usertable using that 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;
        
    

谢谢你

【问题讨论】:

我无法规范化我的表,因为它是由我的前辈创建的。所以我不能谢谢你 那么可能是时候告诉他们谁是前辈了;) 【参考方案1】:

使用FIND_IN_SET() & 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

【讨论】:

@Ritesh 我从来没有使用过codeigniter。我只能以 MySQL 格式为您提供解决方案。对此感到抱歉。你必须自己尝试。 这就是为什么我标记了 codeigniter 但你编辑并删除了该标记 还有什么办法吗??因为 FIND_IN_SET 不适用于 codeigniter @Ritesh 检查我更新的答案。试试看,会有用的 也许你是对的,但我不明白如何在 codeigniter 中实现。【参考方案2】:

@Ritesh:关注Saharsh Shah,你可以把这个查询放到这个命令中 $this->db->query();或者你可以点击这个链接做你想做的事http://ellislab.com/codeigniter/user-guide/database/active_record.html

【讨论】:

【参考方案3】:

使用这个

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;



【讨论】:

以上是关于使用连接(codeigniter)从单个字段中检索和打印逗号分隔符后的值的主要内容,如果未能解决你的问题,请参考以下文章

如何从数据库中检索单个字段数组数据并将它们分开 - 使用 laravel,PHP

Codeigniter - 显示数组字段的单个错误消息

如何使用 jdbc 连接从数据库中检索数据并将其显示在 jsp 文本字段中

在 codeigniter 中使用 AJAX 从视图调用控制器函数并从 db 检索行

如何在单个字段或列中连接多个值? (MySQL)

使用 PHP/CodeIgniter 从具有多对多关系的两个表中显示数据