美好的一天!
是否可以在if condition
的query
中应用codeigniter: model
?
我在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 and activityID from table activity
以及对应部分roleName (from table role) of activityID
。但棘手的是,
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
但是,如果包含逗号(,),它将由逗号(,)分隔为
explode
,然后按如下所示进行连接:$this->db->join('role r', 'r.ID = a.activityID');
,但它也将由roleName输出,介于两者之间。例:
ID ActivityID Role Name
1 5,7,9 Tennis,Football,Soccer
2 2,4 Volleyball,Chess
有人可以帮我弄这个吗?
提前致谢。
最佳答案
在列中用逗号分隔id是一个非常糟糕的主意,您应该首先对结构进行规范化,否则会导致更昂贵的问题,因为现在使用FIND_IN_SET(),因为角色名称也用逗号分隔,所以可以使用
请注意,默认情况下,concat的默认限制为1024个字符,但可以增加,这在手册中已定义
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()
函数进行上述查询请先看看GROUP_CONCAT
关于php - 如果条件在mySQL查询中与Codeigniter中的join,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23511195/