如何在 codeigniter 中使用 FIND_IN_SET() 查询
Posted
技术标签:
【中文标题】如何在 codeigniter 中使用 FIND_IN_SET() 查询【英文标题】:How to use FIND_IN_SET() query in codeigniter 【发布时间】:2017-08-25 07:38:26 【问题描述】:我有两张桌子——一张有出勤详情,另一张有学生详情。以下是表结构:
tbl_attendance
帮助 日期 出勤率
1 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();
但由于每行中有三个用逗号分隔的数字,我希望其余的也能被回显。
【问题讨论】:
【参考方案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】:怎么样?
$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();
【讨论】:
它显示 mysql 语法错误..我运气不好... :-( 哦,我的错 - 我更新了我的答案 - 左边的第三个参数丢失了 这是我得到的错误:您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 3 行的“(ts.st_id,ta.attendance))”附近使用正确的语法 是的 - 我更新了我的答案,因为我遗漏了第三个参数 - 再试一次 查询返回此错误 -> 您的 SQL 语法有错误;查看与您的 MariaDB 服务器版本相对应的手册,了解在 'ts.st_id,ta.attendance) 附近使用的正确语法【参考方案3】:你可以试试这样的查询,
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);
希望这能解决您的问题。
【讨论】:
其实我想回显所有的日期及其对应的缺席者名单。上图只是一个例子…… 我 var_dumped 了上述查询的结果,它重复了很多次这样的结果,如“Achu,Achu,Achu,Achu,Achu,Achu,Achu,Achu,Achu,Achu ,Achu,sruthy,sruthy,sruthy,sruthy,sruthy,sruthy,sruthy,sruthy,sruthy,sruthy,sruthy,sruthy,sruthy, 我做了一些更改,请重试 我希望在 codeigniter 中使用该查询...当我在 codeigniter 表单中尝试此查询时,出现语法错误...所以请您在这方面帮助我... .【参考方案4】:此处以逗号分隔的类别 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。
【讨论】:
以上是关于如何在 codeigniter 中使用 FIND_IN_SET() 查询的主要内容,如果未能解决你的问题,请参考以下文章
如何在 php 中使用 exec 命令运行 codeigniter 控制器功能