Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 没有在Codeigniter、MySQL中搜索我想要的东西_Php_Mysql_Codeigniter - Fatal编程技术网

Php 没有在Codeigniter、MySQL中搜索我想要的东西

Php 没有在Codeigniter、MySQL中搜索我想要的东西,php,mysql,codeigniter,Php,Mysql,Codeigniter,我在be_user_profiles.subject中有以下示例。这些是每个老师教的科目ID 1// English 1,2 // English and Math etc 1,2,14 2,4,114 12,24,34 15, 23 我想选择be_user_profiles.subject有1的位置。当我使用下面的代码时,它会输出所有包含1的代码。因此,它将输出所有数据。我试过了,但它只能找到完全匹配的。所以它只显示了第一个。如何提取具有be_user_profiles.subject的数据

我在be_user_profiles.subject中有以下示例。这些是每个老师教的科目ID

1// English
1,2 // English and Math etc
1,2,14
2,4,114
12,24,34
15, 23
我想选择be_user_profiles.subject有1的位置。当我使用下面的代码时,它会输出所有包含1的代码。因此,它将输出所有数据。我试过了,但它只能找到完全匹配的。所以它只显示了第一个。如何提取具有be_user_profiles.subject的数据

    $this->db->select('*');
    $this->db->from('be_user_profiles');
    $this->db->join('be_users', 'be_users.id = be_user_profiles.user_id');
    $this->db->where('be_users.group', $teachergrp);
    $this->db->like('be_user_profiles.subject', $subjectid);
    //$this->db->having("be_user_profiles.subject = $subjectid");// this picks up only exact match 
    $query = $this->db->get();
提前感谢。

成为用户\u配置文件表

row1: 1,2,14

row2: 2,4,114

row3: 12,24,34

row4: 15, 23
要获取精确匹配的数据,请使用此查询

$this->db->query("
      SELECT * FROM `be_user_profiles` 
      WHERE subject LIKE '1'

      UNION

      SELECT * FROM `be_user_profiles` 
      WHERE subject LIKE '1,%'

      UNION

      SELECT * FROM `be_user_profiles` 
      WHERE subject LIKE '%,1,%'

      UNION

      SELECT * FROM `be_user_profiles` 
      WHERE subject LIKE '%,1'

   ");
be_用户_配置文件表

row1: 1,2,14

row2: 2,4,114

row3: 12,24,34

row4: 15, 23
要获取精确匹配的数据,请使用此查询

$this->db->query("
      SELECT * FROM `be_user_profiles` 
      WHERE subject LIKE '1'

      UNION

      SELECT * FROM `be_user_profiles` 
      WHERE subject LIKE '1,%'

      UNION

      SELECT * FROM `be_user_profiles` 
      WHERE subject LIKE '%,1,%'

      UNION

      SELECT * FROM `be_user_profiles` 
      WHERE subject LIKE '%,1'

   ");

您放入
like
查询中的
bother
子句意味着在要搜索的字符串的前面和后面添加
%
widcard,因此它返回1,长12、21、121等。如果删除它,它将只搜索精确匹配

你可以像子句一样添加这个
,并在其中添加逗号,我认为它会起作用。尝试添加此选项,而不是像现在这样添加

$this->db->like("," . "be_users.group" . "," , "," . $subjectid. "," , both);

您放入
like
查询中的
bother
子句意味着在要搜索的字符串的前面和后面添加
%
widcard,因此它返回1,长12、21、121等。如果删除它,它将只搜索精确匹配

你可以像
子句一样添加这个
,并在其中添加逗号,我认为它会起作用。尝试添加此选项,而不是像现在这样添加

$this->db->like("," . "be_users.group" . "," , "," . $subjectid. "," , both);

我想你可以在这里使用正则表达式模式

$pattern = "(^|.*,)1(,.*|$)";
...
...
$this->db->select('*');
....etc
$this->db->where("be_user_profiles.subject REGEXP $pattern");
此正则表达式模式假定逗号字符串中没有空格

然而,正如@halfer在评论中所说的那样,你真的,真的应该把它拆分成一个“teachersubject”表,其中包含teacherid和subjectid列,否则它会很快地从后面咬你。[在那里,做了那件事:-)]


想象一下,试着扩展上述内容,寻找一位教(数学或物理)和英语的老师。噩梦

我认为您可以在这里使用正则表达式模式

$pattern = "(^|.*,)1(,.*|$)";
...
...
$this->db->select('*');
....etc
$this->db->where("be_user_profiles.subject REGEXP $pattern");
此正则表达式模式假定逗号字符串中没有空格

然而,正如@halfer在评论中所说的那样,你真的,真的应该把它拆分成一个“teachersubject”表,其中包含teacherid和subjectid列,否则它会很快地从后面咬你。[在那里,做了那件事:-)]


想象一下,试着扩展上述内容,寻找一位教(数学或物理)和英语的老师。噩梦

这些逗号分隔的字符串是否实际存储在表中?如果是这样的话,将其分离到另一个表中,并将其存储为整数-这种方法将很快遇到连接问题。完全同意halfer的观点,首先修复数据。这在很大程度上违背了关系数据库的概念。您需要一个连接表来存储教师id和科目id,然后对其进行连接。这些逗号分隔的字符串是否实际存储在您的表中?如果是这样的话,将其分离到另一个表中,并将其存储为整数-这种方法将很快遇到连接问题。完全同意halfer的观点,首先修复数据。这在很大程度上违背了关系数据库的概念。您需要一个存储教师id和科目id的联接表,然后对其进行联接。