使用连接(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
如何使用 jdbc 连接从数据库中检索数据并将其显示在 jsp 文本字段中