如何在codeigniter中使用FIND_IN_SET()查询

时间:2017-03-31 06:24:01

标签: php arrays function codeigniter

我有两张桌子 - 一张有出勤详情,另一张有学生详细资料。以下是表结构:

tbl_attendance

援助日期出勤

2017-03-09 5,6,9
 2 2017-04-06 12,6,10

tbl_students

student_id名称

5约翰
6布莱恩

9安娜

10马修

12苏珊

现在,我想在视图中显示缺席者的姓名。例如:

缺席日期

2017-03-09约翰,布莱恩,安娜

2017-03-06苏珊,布莱恩,马修

我试图用FIND_IN_SET()来做这件事但是看起来运气不好..有没有更好的方法来解决这个问题?

更新

我使用了这个查询,它只回显了每行中第一个id的名字......

    $query = $this->db
   ->select("tbl_attendance.*,tbl_students.name")
   ->from("tbl_attendance")
   ->join("tbl_students","tbl_students.student_id=tbl_attendance.attendance")
   ->where('FIND_IN_SET(tbl_students.student_id, tbl_attendance.attendance)')
   ->GROUP_BY('tbl_students.student_id')
   ->get()->result_array(); 

但由于每行中有三个用逗号分隔的数字,我希望其余部分也能被回显。

4 个答案:

答案 0 :(得分:2)

那怎么样?

$query = $this->db
    ->select("td.Date, GROUP_CONCAT(ts.student_name)")
    ->from("tbl_students AS ts")
    ->join("tbl_attendance AS ta","find_in_set(ts.st_id,ta.attendance)","left",false)
    ->get();

答案 1 :(得分:1)

这有效

$query = $this->db
    ->select("td.Date, GROUP_CONCAT(ts.student_name SEPARATOR ',')")
    ->from("tbl_students AS ts")
    ->join("tbl_attendance AS ta","find_in_set(ts.st_id,ta.attendance)<> 0","left",false)
    ->get();

答案 2 :(得分:0)

您可以尝试这样的查询,

SELECT a.`date`,group_concat(s.student_name)  
FROM tbl_attendance a,tbl_students s  
WHERE FIND_IN_SET(s.st_id, a.attendance) group by `date`;

描述:
FIND_IN_SET,允许您在以逗号分隔的字符串列表中查找字符串的位置。

语法:

FIND_IN_SET(needle,haystack);

希望这能解决您的问题。

答案 3 :(得分:0)

此处用逗号分隔的类别ID保存在“类别”行中,例如“ 12、15、7、19”

$category_ID = 15;

$this->db->select('*'); $this->db->from('products'); $this->db->where('FIND_IN_SET("'.$category_ID.'","category") <>','0'); $this->db->where('deleted','0'); $this->db->order_by('product_ID', 'DESC');

我希望这可以帮助CI开发人员使用 FIND_IN_SET