where_in 和 find_in_set 之间的区别

2023-12-13

我正在处理一个联接查询,其中我必须从包含逗号分隔值的列中获取数据。allowed_activity包含1,2,3,4,5,6这就是activity_id这是允许的。

因此,在查询中,我正在检查当前活动是否允许,为此,我使用了where_in并且也尝试过find_in_set in where健康)状况。

这是查询的一部分:

$this->db->where_in('a.allowed_activity',$activity_id);
//And With FIND_IN_SET
$this->db->where("FIND_IN_SET($activity_id, a.allowed_activity) !=",0);

问题或困惑

当我使用where_in它没有给我结果。但如果我使用FIND_IN_SET然后它会返回所需的结果。我以为where_in可以完成任务,但没有。

只是想知道为什么find_in_set工作方式不同于where_in因为这两个函数的工作方式与在逗号分隔列表中查找数据相同。

这是完整的查询:

SELECT mycolumns
FROM `table1` as `ea`
LEFT OUTER JOIN `table2` as `a` ON `ea`.`package_id` = `a`.`id`
LEFT OUTER JOIN `table3` as `e` ON `ea`.`employer_id` = `e`.`id`
WHERE `ea`.`card_id` > 0
AND FIND_IN_SET(6, a.allowed_activity) !=0
AND `ea`.`id` = '6'
ORDER BY `ea`.`creation_date` DESC

我正在使用 Codeigniter 活动记录。


WHERE IN要求在查询中按字面指定值集,而不是包含逗号分隔字符串的单个值。如果你写:

WHERE 6 IN (a.allowed_activity)

它会治疗a.allowed_activity作为单个值,并将其与6,而不是作为一组多个值进行搜索。

FIND_IN_SET在逗号分隔的字符串中搜索值。

另一种查看方式是IN是一堆的捷径=测试结合OR:

WHERE x IN (a, b, c, d)

是缩写

WHERE x = a OR x = b OR x = c OR x = d

当您像这样重写它时,您可以清楚地看到为什么它不适用于包含逗号分隔字符串的列。简单翻译一下就是

WHERE 6 IN (a.allowed_activity) 

to:

WHERE 6 = a.allowed_activity
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

where_in 和 find_in_set 之间的区别 的相关文章

  • 使用单个查询和每用户密码盐进行用户登录

    我决定使用存储在数据库中的每用户盐来实现用户登录 盐作为密码的前缀 该密码使用 SHA 进行哈希处理并存储在数据库中 过去 当我不使用盐时 我会使用典型的方法 使用用户输入的用户名和密码来计算查询返回的行数 然而 对于每个用户的盐 您需要先
  • MySQL 如何使用返回多行的 SELECT 子查询插入表?

    MySQL 如何使用返回多行的 SELECT 子查询插入表 INSERT INTO Results People names VALUES SELECT d id FROM Names f JOIN People d ON d id f i
  • PDO 库比本机 MySQL 函数更快吗?

    我已经阅读了几个与此相关的问题 但我担心它们可能已经过时 因为自这些问题得到解答以来 更新版本的 PDO 库已经发布 我编写了一个 MySQL 类 它构建查询并转义参数 然后根据查询返回结果 目前这个类正在使用内置的mysql函数 我很清楚
  • 如何通过单个mysql查询更新多个表?

    我有两个表 tb1 和 tb2 我必须在用户级别更新两个表的公共列 我对两个表都有一个共同的标准 例如用户名 所以我想这样更新 UPDATE tb1 tb2 SET user level 1 WHERE username Mr X 但不知何
  • 安全转义表名/列名

    我在 php 中使用 PDO 因此无法使用准备好的语句转义表名或列名 以下是我自己实现它的万无一失的方法 tn str replace REQUEST tn column str replace REQUEST column sql SEL
  • BigDecimal 的 JPA @Size 注释

    我该如何使用 SizeMySQL 的注释DECIMAL x y 列 我在用着BigDecimal 但是当我尝试包括 Size max它不起作用 这是我的代码 Size max 7 2 Column name weight private B
  • 使用 Laravel Fluent 查询生成器从多个表中进行选择

    我正在重写一些 PHP MySQL 来与 Laravel 一起使用 我想做的一件事是使数据库查询更加简洁使用 Fluent 查询生成器 http laravel com docs database fluent但我有点迷失 SELECT p
  • MySQL 查询获取每小时计数

    我需要统计每小时发生的操作次数 我的数据库按操作的时间戳保存日志 我明白我可以做一个 SELECT table time COUNT table time from table t group by t time 然而 也有一段时间没有采取
  • 解析错误:语法错误,意外的“”(T_ENCAPSED_AND_WHITESPACE)[重复]

    这个问题在这里已经有答案了 完整错误 解析错误 语法错误 意外的 T ENCAPSED AND WHITESPACE 需要标识符 T STRING 或 变量 T VARIABLE 或数字 T NUM STRING 它说错误出现在第 12 行
  • MySQL:记录之间的平均间隔

    假设这张表 id date 1 2010 12 12 2 2010 12 13 3 2010 12 18 4 2010 12 22 5 2010 12 23 如何仅使用 MySQL 查询找到这些日期之间的平均间隔 例如 此表上的计算将是 2
  • django - 设置中带有数据库 url 的 MySQL 严格模式

    我在设置中使用数据库 URL 字符串 例如 DATABASES default mysql root localhost 3306 mydb 当我迁移时 我收到此警告 MySQL Strict Mode is not set for dat
  • 将数据从 MS SQL 导入 MySQL

    我想从 MS SQL Server 导入数据 通过某种正则表达式运行它以过滤掉内容 然后将其导入 MySQL 然后 对于每个查询 我希望显示来自第三个数据库的相关图像 明智地导入和链接 最简单的方法是什么 谢谢 澄清 它是一个 PHP 应用
  • 错误代码:1822(当数据类型匹配且具有复合键时)

    得到一个 错误代码 1822 添加外键约束失败 丢失的 引用表中约束 subject ibfk 1 的索引 注册 当尝试创建subject桌子 问题是 错误并没有出现在上一张表上student 数据类型相同 并且定义了主键 两者都会出现此错
  • MySQL 过去 12 个月的月度销售情况,包括没有销售的月份

    SELECT DATE FORMAT date b AS month SUM total price as total FROM cart WHERE date lt NOW and date gt Date add Now interva
  • 展平具有未知列数的子/父数据

    我正在努力寻找存储和表示 SQL MySQL DB 和 C Windows 表单中的数据的最佳方法 我的数据映射到如下所示的类时 public class Parent public string UniqueID get set Key
  • ORDER BY id 或 date_created 显示最新结果?

    我有一个表 实际上有几个 我想首先从中获取最新条目的结果 这是我的ORDER BY条款选项 date created INT 从不改变值 id 当然是INT AUTO INCRMENT 两列应同等地代表记录插入的顺序 我自然会使用date
  • 使用 RMySQL 会干扰 RPostgreSQL

    我有一个 R 脚本 我想从 MySQL 数据库中提取一些数据 然后从 PostgreSQL 数据库中提取一些数据 但是 从 RMySQL 加载 MySQL 驱动程序会阻止我从以下位置加载 PostgreSQL 驱动程序 PostgreSQL
  • PHP mysql_num_rows 死错误

    我想创建一个页面 用户可以在其中添加他们的信息 我已经创建了该页面 但我真正的问题是代码 我有一些问题 这部分代码
  • mysql计算唯一行值

    TABLE quotation id clientid 1 25 2 25 3 25 4 25 5 26 如何查询有多少个不同的客户端TABLE quotation 我不希望重复的条目被计算多次 我需要的答案是2 在 1 行中 因为唯一的非
  • mysql中的按位移位

    如何在 MySQL 中进行按位移位 有没有具体的指令或者操作符 如果不是 如何最佳地模拟它 看一下按位运算符MySQL first http dev mysql com doc refman 5 0 en bit functions htm

随机推荐

  • 调用 [NSBundle mainBundle] 时 XCTest 失败

    我有一些代码可以调用 NSBundle mainBundle 在某些时候 主要是为了读取 设置首选项 当我对该方法进行单元测试时 测试失败 因为测试的 mainBundle 不包含该文件 This is 一个已知问题 苹果不会像他们认为的那
  • ssl_error_rx_record_too_long 和 Apache SSL [关闭]

    Closed 这个问题是无关 目前不接受答案 我有一位客户尝试访问我的网站之一 但他们不断收到此错误 gt ssl error rx record too long 他们在所有浏览器 所有平台上都会收到此错误 我根本无法重现这个问题 我和我
  • 来自我的本机 iPhone 应用程序的 linkedin 连接

    大家好 我是 iphone 开发新手 我想从我的本机 iphone 应用程序连接到 linkedin 我目前不知道如何连接到它 请指导我该怎么做 From http www zhangkf com 2010 06 linkedin deve
  • onclick() 函数可以不与调用它的元素同名吗? [复制]

    这个问题在这里已经有答案了 所以我有这个按钮元素 无论我做什么 它都会拒绝触发它的 onclick 函数 这让我发疯了一段时间
  • htaccess 重写 url,如 Stack Overflow

    Stack Overflow 生成重写 URL 所以我需要知道如何像 Stack Overflow 那样做到这一点 http stackoverflow com questions 9168364 how to rewrite seo fr
  • 在 foreach 循环中使用字符串变量检索图像资源

    我有一个字符串数组 abc 我把它放在 foreach 循环中 我想使用 foreach 循环中的值从资源中检索图像并将其放入图片框中 代码如下 char stringArr inputted ToCharArray foreach cha
  • 跨多个用户共享 BigQuery 的缓存

    据我了解 BigQuery 的caching机制是基于每个用户的 但我们希望能够在项目 数据集 表级别上共享缓存 例如 约翰和玛丽都在同一个 Google 项目上工作XYZ 他们喜欢使用 BigQuery 并且都查询表Bar在数据集中Foo
  • 我的rec函数是尾递归的吗?

    这个函数是尾递归的吗 let rec rec algo1 step J if step dSs then J else let a Array init Array2D length1 M fun i gt minby1J i M J le
  • 根据所需长度分割字符串

    有没有一种简单的方法可以根据所需的长度分割字符串 例如 我有一个字符串
  • 如何在主容器中注册类型,但在子容器中解析?

    我有一个统一容器并使用RegisterType使用以下方法注册以下存储库和实现者ContainerControlledLifetimeManager public interface IPersonRepository Person Get
  • 将 C++ string/wchar_t* 转换为 C# 字符串?

    问题 我需要从 C 可执行文件调用 C dll 我使用 COM 它对于 int long 和 bool 工作得很好 但我连一根绳子都拉不起来 IDL 文件说它是一个 BSTR 但我无法正确传递它 也无法检索它 我尝试像使用 VB6 一样使用
  • C++ 中的映射可以接受任何类型的值

    我想在 c 中创建一个可以接受任何类型值的映射 我在 java 中使用 Object 类做了同样的事情 映射但不知道如何在 C 中执行此操作 请帮忙 正如前面的答案正确建议的那样 您不能在 C 中开箱即用 我假设通过 可以接受任何类型的值
  • 由于环境错误而无法安装软件包:[Errno 13]

    在我的 MacOS Mojave 终端中 我想使用 pip 安装 python 包 最后它说 You are using pip version 10 0 1 however version 18 1 is available You sh
  • TypeError:“pygame.Surface”对象不可调用并且 pygame 窗口崩溃

    我对 Pygame 和 Python 很陌生 我刚刚编写了第一个代码 但不知何故我不断收到此错误 TypeError pygame Surface object is not callable 我不知道代码是否有问题 或者只是因为Pygam
  • string_split的结果顺序?

    现在我发现这很棒string split 函数 然后我了解到输出行可以按任意顺序排列 不保证顺序与输入字符串中子字符串的顺序匹配 这使得该功能对我来说毫无用处 也许有解决方法吗 EDIT 例子 SELECT value FROM Strin
  • 当子查询格式错误时,T-SQL 删除表中的所有行[重复]

    这个问题在这里已经有答案了 可能的重复 sql server 2008 Management Studio 不检查我的查询的语法 我今天遇到一个问题 子查询很糟糕 结果是父表中的所有行都被删除 TableA ID Text GUID Tab
  • sed多行替换问题

    我遇到了 sed 替换问题 希望你们中的一位能够帮助我 我确信我错过了一些简单的事情 所以我有一个包含文本和引用的文件 引用本身可以在一行上 也可以跨多行 我希望引用内容单独占一行 作为示例 这里是文件的示例 And he said Thi
  • 发布为 Azure WebJob 在 VS 2013 中不起作用

    我正在尝试使用 Visual Studio 2013 发布一个 Azure 网站以及一些 azure webjobs 我正在关注本教程 我的解决方案具有以下结构 当我尝试将现有项目作为 Web 作业添加到我的 Web 项目中时 我在 项目名
  • 如何清理 Massscan 输出 (-oL)

    我对带有 oL 选项的 Masscan 实用程序生成的输出有疑问 grep able 输出 例如 它输出 Host 143 137 155 7 Ports 80 open tcp Host 177 105 21 41 Ports 8080
  • where_in 和 find_in_set 之间的区别

    我正在处理一个联接查询 其中我必须从包含逗号分隔值的列中获取数据 allowed activity包含1 2 3 4 5 6这就是activity id这是允许的 因此 在查询中 我正在检查当前活动是否允许 为此 我使用了where in并