我有两张桌子 - 一张有出勤详情,另一张有学生详细资料。以下是表结构:
援助日期出勤
2017-03-09 5,6,9
2 2017-04-06 12,6,10
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();
但由于每行中有三个用逗号分隔的数字,我希望其余部分也能被回显。
答案 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 。