美好的一天!
是否可以在if condition
的{{1}}中应用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
所以我想在查询中使用if条件,就好像activityID值不包含逗号(,)一样,它将使用如下的连接:ID ActivityID
1 5,7,9
2 2,4
3
4 10
5 1,6
然后获取$this->db->join('role r', 'r.ID = a.activityID');
。
例如:
r.roleName
但是如果包含逗号(,),它将由逗号(,)ID ActivityID Role Name
4 10 Basketball
然后像这样连接:explode
但它也将由roleName输出,其间有逗号。
例如:
$this->db->join('role r', 'r.ID = a.activityID');
有人可以帮我吗? 提前谢谢。
答案 0 :(得分:0)
在你的专栏中使用逗号分隔的ID是非常糟糕的,你应首先规范化你的结构,否则会导致更昂贵的问题,现在你使用FIND_IN_SET(),因为角色名也是以逗号分隔你可以使用GROUP_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()
函数