如何在 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 控制器功能

FIND_IN_SET在codeigniter中的查询中自动添加IS NULL,还需要在我的查询中添加括号以创建组

如何在codeigniter中使用ajax上传图片?

我应该在 CodeIgniter 中使用哪个会话库?

Codeigniter _remap 函数

如何在CodeIgniter中编写更好的模型