【问题标题】:Getting result for comma separated value with where condition使用 where 条件获取逗号分隔值的结果
【发布时间】:2016-06-06 08:15:16
【问题描述】:

当我将多个值传递给 $area 和 $keyword_whomtoteach 时,我有 2 列的值都带有逗号 keyword_whomtoteach 和 area_tutor 我没有得到正确的输出我正在使用这个查询

     $toteach=1,5      $area=1,5
     $search  = "keyword_whomtoteach IN (".$toteach.")";
     $where = "area_tutor IN (".$area.")";

     $this->db->where($search);
     $this->db->or_where($where);
     $query=$this->db->get();
     return $result = $query->result_array();

在这里我得到了正确的结果,但问题是我需要这样的东西 如果

id   keyword_whomtoteach             area_tutor
  1  1,2,3,4,5                         1,2
  2  2,3,5                             2,3
  3  5,6,7                             1,4
  4  1,5,6                             5,6

我想要一些东西,比如当我通过 $toteach=1 和 $area=1,5 时,我应该同时获得 id 1 和 4,因为它们都有 keyword_whometoteach=1,5

【问题讨论】:

  • FIND_IN_SET() vs IN()的可能重复
  • 我看过这个例子,但我无法解决@matt raines
  • 为什么不能正确规范化数据?它将消除寻找复杂且低效的工作区的需要
  • 没有样本数据、预期结果和实际收到的结果或错误信息,任何答案都只能是纯粹的猜测。
  • “解决问题”有两个选项.... 选项 #1 是正确规范您的数据库;选项 #2 是尝试笨拙和低效的工作区(例如 FIND_IN_SET())......但你永远不会获得良好的性能,并且除非你使用选项 #1,否则你的代码将总是过于复杂且难以维护

标签: php mysql codeigniter comma


【解决方案1】:

您应该将column_name IN('1,5') 语法替换为FIND_IN_SET(1, column_name) AND FIND_IN_SET(5, column_name)FIND_IN_SET(1, column_name) OR FIND_IN_SET(5, column_name)(取决于所需的结果)。

但是,您的架构不是存储这些数据的好方法。创建第二个表并将逗号分隔的列表存储在此表中将是标准做法。阅读Is storing a delimited list in a database column really that bad?,了解更多关于如何以及为什么的信息。

您还有 PHP 语法错误($toteach=1,5 $area=1,5 应该是 $toteach='1,5'; $area='1,5';)并且您的 MySQL 查询需要在 $toteach$area 周围加上引号。

【讨论】:

  • 我刚刚提供了演示数据,好的,我将通过此链接进行操作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-11
  • 2021-12-31
  • 1970-01-01
相关资源
最近更新 更多