美好的一天!

是否可以在if conditionquery中应用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/

10-10 19:18