Mysql 中 LIKE 子句的替代方案

2023-12-11

我的数据库表中有一个存储类别的文件。我以以下格式存储类别:

1,12,15

现在,当我尝试从类别 1 中搜索产品时, 我用LIKE我的查询中的子句,例如

where (prod_catg LIKE %1,% or prod_catg LIKE %1% or prod_catg LIKE %,1% )

这将返回所有三个类别 1,12 和 15 的产品。相反,我只想要类别 1 的产品。

我也尝试过IN条款但未找到结果。

任何人都可以建议我其他选择吗?


prod_catg LIKE '1,%' --matches when 1 is the first category
OR prod_catg LIKE '%,1,%' --matches when 1 is somewhere in the middle
OR prod_catg LIKE '%,1' --matches 1 when is the last category

无论如何,您最好通过添加类别表以及产品(主)表上对它的引用来重构您的架构

EDIT

面对这个问题的另一种方法是使用REGEXP这将导致更短的WHERE子句(这是我用来测试的):

DECLARE @regexp VARCHAR(100);
SET @regexp = '^1,.*|.*,1$|.*,1,.*';

SELECT
    '1,11,15,51,22,31' REGEXP @regexp AS test1,
    '51,11,15,1,22,31' REGEXP @regexp AS test2,
    '11,15,51,22,31,1' REGEXP @regexp AS test3,
    '7,11,15,51,22,31' REGEXP @regexp AS test4,
    '51,11,15,7,22,31' REGEXP @regexp AS test5,
    '11,15,51,22,31,7' REGEXP @regexp AS test6;

这将匹配你的prod_catg反对正则表达式'^1,.*|.*,1$|.*,1,.*'返回1 (TRUE)如果匹配的话0 (FALSE)否则。

那么你的 WHERE 子句将如下所示:

WHERE prod_catg REGEXP '^1,.*|.*,1$|.*,1,.*'

正则表达式的解释:

^1,.* --matches 1 at the beginning of a string followed by a `,` and any other char
.*,1$ --matches 1 at the end of a string preceded by a `,` and any other char
.*,1,.* --matches 1 between two `,` which are sourrounded by any other chars
| --is the OR operator

我确信这个正则表达式可以更紧凑,但我不太擅长正则表达式

显然你可以改变你在正则表达式中寻找的类别(尝试替换1 with 7在上面的例子中)

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

Mysql 中 LIKE 子句的替代方案 的相关文章

  • PDO::commit() 成功或失败

    The PHP PDO 提交 http www php net manual en pdo commit php文档指出该方法成功时返回 TRUE 失败时返回 FALSE 这是指beginTransaction 和commit 之间的语句执
  • 本地数据库缓存的最佳实践?

    我正在开发一个应用程序 该应用程序的部分内容依赖于 MySQL 数据库 在某些情况下 应用程序将在互联网连接 UMTS 有限的环境中运行 特别是延迟较高的环境 应用程序的用户能够登录 并且应用程序用户界面的大部分内容都是从 MySQL 数据
  • PHP 的 PDO 可以限制为单个查询吗?

    PHP 的 PDO 允许通过 query 方法或作为准备好的语句同时执行多个查询 以下两个示例均有效 Two SQL queries query SELECT FROM table DROP table Execute via query
  • 从 PDO 准备好的语句中获取原始 SQL 查询字符串

    在准备好的语句上调用 PDOStatement execute 时 有没有办法让原始 SQL 字符串执行 出于调试目的 这将非常有用 我假设您的意思是您想要最终的 SQL 查询 并将参数值插入其中 我知道这对于调试很有用 但这不是准备好的语
  • Clojure MySQL 语法错误异常(“[...] 靠近 '???????????????' [...]”)

    除了建立连接之外 我在使用 clojure contrib sql 做任何事情时都遇到困难 我有一个 mysqld 在 localhost 3306 上运行 数据库名为clj db 用户 clj user localhost 和密码 clj
  • MYSql 前 10 名及其他总计

    我的查询运行良好 但我只需要前 10 个供应商 然后我需要将所有剩余的总计放在 所有其他 行中 如果没有单独的查询 我该如何做到这一点LIMIT 10 18446744073709551615 SELECT VENDOR fullname
  • 错误代码 13,SELECT INTO OUTFILE 问题

    我试图了解使用 INTO OUTFILE 命令时不断遇到问题的原因 我总是收到这个错误 ERROR 1 HY000 Can t create write to file var www p1 txt Errcode 13 SELECT pa
  • 将此 MySQL 查询转换为 PyGreSQL

    我正在开发一个 Ruby 应用程序 它使用 mysql 函数 XOR 和 BIT COUNT 不过 我现在需要在运行 PyGreSQL 的 Heroku 上运行该应用程序 我找不到任何可以帮助我的 PyGreSQL 文档 那么任何人都可以翻
  • 1:1 关系中的双向外键约束

    我正在使用 MySQL 数据库 在我的关系数据模型中 我有两个相互 1 1 关联的实体 在我的架构中 通过将 FK 字段放入两个表之一中来建立 1 1 关系 该字段与另一个表的 PK 相关 两个表都有 PK 并且都是自动递增的 BIGINT
  • MySQL:空间查询查找纬度/经度点是否位于给定边界内

    我正在研究谷歌地图搜索功能 其目的是找出 地理位置 点是否位于多边形内 如下图所示 我使用带有 Spatial 扩展的 mysql 5 6 20 我知道它内置有用的几何函数 因此我可以直接从数据库查询地理编码位置 我的目的是熟悉地理空间函数
  • 有没有办法只安装mysql客户端(Linux)? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有没有不需要安装整个mysql db安装包的Linux mysql命令行工具 我想做的是从服务器 1 应用程序服务器 执行将在服务器 2
  • PHP + MySQL 队列

    我需要一个充当队列的简单表 我的 MySQL 服务器限制是我不能使用 InnoDB 表 只能使用 MyISAM 客户 工人将同时工作 他们每次都需要接受不同的工作 我的想法是执行以下操作 伪代码 job lt SELECT FROM que
  • MySQL 选择第一个字符在哪里

    如何选择单元格的第一个字符并使用它来定义返回的内容 看看MySQL 字符串 和 控制流 功能 http dev mysql com doc refman 5 1 en functions html 例如 SELECT IF LEFT myF
  • 选择 mysql 枚举的 php 函数

    因此 我创建了一个函数 它将从数据库中的枚举字段中提取值
  • MySQL 使用 DATE_ADD 设置 DATE 列的默认值?

    我正在尝试使用表达式将 DATE 列添加到具有 DEFAULT DATE 值的表中 ALTER TABLE wp ezts project params ADD est completion DATE NOT NULL DEFAULT DA
  • 将java应用程序与在线托管的mysql数据库连接

    我已经用java构建了一个应用程序 应用程序是一个 将在3个不同的系统上使用 因此 该应用程序的数据库必须在线 以使所有 3 个应用程序都具有最新的数据库 In starting I developed my application bas
  • 无法打开 phpmyadmin,require_once(./libraries/common.inc.php):无法打开流:没有这样的文件或目录

    当我做php usr share phpmyadmin index php 我明白了 PHP 警告 require once libraries common inc php 无法打开流 第 33 行 usr share phpmyadmi
  • MySQL:为什么 IN 子句中的第 5 个 ID 会极大地改变查询计划?

    给出以下两个查询 Query 1 SELECT log id FROM log WHERE user id IN 188858 188886 189854 203623 204072 and type in 14 15 17 ORDER B
  • Python MySQL 模块

    我正在开发一个需要与 MySQL 数据库交互的 Web 应用程序 但我似乎找不到任何真正适合 Python 的模块 我特别寻找快速模块 能够处理数十万个连接 和查询 所有这些都在短时间内完成 而不会对速度产生重大影响 我想我的答案将是游戏领
  • 如何使用 SQL - INSERT...ON DUPLICATE KEY UPDATE?

    我有一个脚本可以捕获推文并将其放入数据库中 我将在 cronjob 上运行脚本 然后在我的网站上显示数据库中的推文 以防止达到 Twitter API 的限制 所以我不想在我的数据库中有重复的推文 我知道我可以使用 INSERT ON DU

随机推荐

  • C# 不通过返回类型推断重载方法

    我正在编写一个 C 程序来抓取目录并提供最后 CSV 行中的日期小于当前日期的文件列表 由于这是一个程序 因此我并没有真正花费太多时间使代码变得非常干净或任何东西 但这只是一个意见问题 我想 奇怪的是下面的一组代码片段 三个静态方法都在同一
  • AngularUI - 兼容的浏览器

    我尝试打开 AngularUI 网站 http angular ui github io 在 IE8 中 UI 在 IE8 中无法正确呈现 在最新版本的 chrome firefox 中工作正常 这促使我搜索 AngularUI 模块的浏览
  • IndexError:列表赋值索引超出范围 - 使用数组的 Python

    我最近开始使用 python 但对于该语言的很多东西我仍然是新手 这段代码应该打印一系列行 例如 47 815 47 54 48 065 57 45 我从几个文本文件 称为 2t1 2t19 3t1 3t19 作为输入以及结束后的文件名 每
  • Cheerio 不会等待正文加载

    我制作了一个非常简单的脚本 它抓取了一个食谱网站以获取标题 准备时间和成分 除了脚本无法抓取数组的每一页之外 一切工作正常 有时我得到 4 个 有时 2 个 有时甚至 0 个 看来脚本不会等待主体完全加载 我完全知道 Cheerio 不理解
  • 带有被安全/ASR 规则阻止的宏的工具 - 如何修复?

    我有一个 Excel 工具 xlsm 文件 我正在向用户传播 他们从我们的网站下载该文件 然后就可以使用它 简而言之 该工具有自己的菜单栏和一堆宏 例如进行计算 从 API 提取数据等 我使用 Unviewable 对用户隐藏代码 我用证书
  • 是否可以以编程方式检测 元素中的插入符位置?

    假设有一个常规的
  • 在python中比较两个字典以获得相似键的最大值

    我有这两个命令 a test1 90 test2 45 test3 67 test4 74 b test1 32 test2 45 test3 82 test4 100 如何提取同一键的最大值以获取新字典 如下所示 c test1 90 t
  • 使用delphi将PNGImage转换为灰度

    你好呀 这是我的代码 procedure TForm4 Button1Click Sender TObject var png TPNGImage data PRGBQarray p tagRGBQuad i o integer begin
  • 在Where 子句或替代选项中使用别名?

    我如何让它工作 它可以在没有Where子句的情况下工作 否则使用Where子句 我会得到明显的错误 但这基本上是需要做的 有人知道如何解决这个问题吗 select ID Name case T N when 1 then City1 whe
  • PUSH 数组 C++?

    如何动态向数组添加值 推送 我可以在 AS3 中执行此操作 但在 C 中找不到它的函数 如果它是静态定义的数组 则不能 如下所示 int array 10 它的大小是固定的 但是 如果您使用诸如std vector你会用 std vecto
  • D3 带边界框的力定向布局

    我是 D3 新手 在设置力导向布局的边界时遇到困难 我已经设法 从示例中 拼凑出我想要的内容 但我需要包含图表 在刻度函数中 变换 翻译将正确显示我的图形 但是当我将 cx 和 cy 与 Math max min 一起使用时 请参阅注释代码
  • 犰狳中的 Rcpp 糖命令

    我正在尝试使用ifelse Rcpp 糖的命令arma vec 代码失败并出现错误 ifelse was not declared in this scope 我找不到解决方案 下面是一个简单的示例代码 导致错误 include
  • 安装 Visual Studio 2015 RTM 后未加载包

    问题 我安装了 Visual Studio 2015 RC 并在其上安装了 Visual Studio 2015 RTM 我在互联网上找不到任何表明您不能这样做的内容 我不知道这是否与问题相关 不幸的是 当我重新启动后第一次启动 Visua
  • 我需要知道用户单击按钮时是否按下(按下)某个键

    在 Flutter 桌面应用程序中 我想知道当用户用鼠标单击按钮时 他们是否也按住了某个键 如 Shift Control Alt 等 如何才能做到这一点 EDIT 我最初的问题不够清楚 我有一个动态复选框列表 我想使用 SHIFT 单击来
  • 我应该使用哪种数据结构从 CSV 中搜索字符串?

    我有一个 csv 文件 其中包含近 200000 行 其中包含两列 姓名和工作 然后 用户输入一个名称 例如 user name 我必须搜索整个 csv 以查找包含模式 user name 的名称 最后将输出打印到屏幕 我在 Java 中使
  • C#:如何将文本附加到类中表单上的文本框?

    我有一个名为 Form1 cs 的表单 它调用一个我们将称为 Class1 cs 的类 以及另一个名为 Form2 cs 的表单 如果 Form2 打开 Class1 中的子例程需要更新 Form2 中的文本框 文本需要在附加到文本框中的当
  • 使用 libvlc 播放 mp3 的简单 C 程序

    我是一名普通的 C C 程序员 最近 我接手了一个项目 制作一个带有智能播放列表的媒体播放器 其工作方式类似于 Zune 的 SmartDj 我决定使用libvlc来玩 我以前从未编写过开源软件 所以我对 git 等一无所知 你能帮我至少写
  • Java:我需要以编程方式解析、修改和写回 Java 源文件

    我需要解析 修改和写回Java源文件 我研究了一些选择 但似乎我没有抓住重点 解析后的 AST 输出在写回文件时总是会使用标准格式而不是原始格式来搞乱格式 基本上我想要一些可以做的事情 content write parse sourceF
  • docker 未经授权:需要身份验证 - 成功登录后推送

    从主机推送 docker 映像 成功登录后 时 我收到 未经授权 需要身份验证 详细信息如下 bash 4 2 docker login username asamba email protected WARNING login crede
  • Mysql 中 LIKE 子句的替代方案

    我的数据库表中有一个存储类别的文件 我以以下格式存储类别 1 12 15 现在 当我尝试从类别 1 中搜索产品时 我用LIKE我的查询中的子句 例如 where prod catg LIKE 1 or prod catg LIKE 1 or