gpt4 book ai didi

php - MySQL 查询中的 if 条件与 Codeigniter 中的联接

转载 作者:行者123 更新时间:2023-11-30 00:17:48 25 4
gpt4 key购买 nike

美好的一天!

是否可以在codeigniter: model查询中应用if条件?我在 Model 中有此查询:

function activity($id) {        
$this->db->select('a.ID, a.activityID, r.roleName');
$this->db->from('activity a');
$this->db->join('role r', 'r.ID = a.activityID');
$this->db->where('a.ID', $id);
$query = $this->db->get();

return $query->result_array();
}

在我看来,我想显示表事件中的ID和activityID以及activityID的对应部分roleName(来自表角色)。但棘手的部分是 activityID 中的值不仅仅是一个简单的 INT,如下所示:

ID  ActivityID
1 5,7,9
2 2,4
3
4 10
5 1,6

所以我想在查询中使用if条件,比如如果activityID值不包含逗号(,),它将使用这样的连接: $this->db->join('role r' , 'r.ID = a.activityID'); 然后获取r.roleName。示例:

ID  ActivityID  Role Name
4 10 Basketball

但是如果包含逗号 (,),它将通过逗号 (,)分解,然后像这样连接: $this->db->join('role r', 'r .ID = a.activityID'); 但它也会按角色名称输出,中间用逗号分隔。示例:

ID  ActivityID  Role Name
1 5,7,9 Tennis,Football,Soccer
2 2,4 Volleyball,Chess

有人可以帮我解决这个问题吗?提前致谢。

最佳答案

在你的列中使用逗号分隔的 id 是一个非常糟糕的主意,你应该首先规范你的结构,否则它会导致你更昂贵的问题,现在你使用 FIND_IN_SET() ,如果角色名称也以逗号分隔,您可以使用 GROUP_CONCAT

Be ware of that fact it has a default limit of 1024 characters to concat but it can be increased which is defined in manual

SELECT 
a.ID,
GROUP_CONCAT(a.activityID) activityID,
GROUP_CONCAT(r.roleName) roleName
FROM activity a
LEFT JOIN `role` r ON(FIND_IN_SET(r.ID,a.activityID) > 0);
WHERE a.ID = $id
GROUP BY a.ID

对于 CI,使用 query() 函数进行上述查询

Please first have a look at Database Normalization

关于php - MySQL 查询中的 if 条件与 Codeigniter 中的联接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23511195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com