如果在mySQL查询条件中加入Codeigniter

时间:2014-05-07 07:16:59

标签: php mysql codeigniter

美好的一天!

是否可以在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');

有人可以帮我吗? 提前谢谢。

1 个答案:

答案 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()函数

  

请先查看Database Normalization