Mysql SELECT LIKE 字符串的所有组合

发布于 2025-01-13 13:47:48 字数 666 浏览 0 评论 0原文

我有一张包含产品的表格:

**ID > Product**
01 > Cable Printer Black USB
02 > Power Cable for PC
03 > Headset with microphone USB blue
04 > USB Extension Cable

我需要进行如下搜索: USB+数据线 结果以任何顺序显示 USB+Cable:(usb+cable 或 Cable+usb)

结果显示:

01 > Cable Printer Black USB
04 > USB Extension Cable

我尝试使用 REGEXP,但它显示任何带有 2 个术语的寄存器,但我需要结果中的所有术语,而不是任何。

SELECT * FROM tbproducts WHERE product REGEXP 'USB|Cable'

展示:

01 > Cable Printer Black USB
02 > Power Cable for PC
03 > Headset with microphone USB blue
04 > USB Extension Cable

I have a table with products:

**ID > Product**
01 > Cable Printer Black USB
02 > Power Cable for PC
03 > Headset with microphone USB blue
04 > USB Extension Cable

I need do a search like:
USB + Cable
and the result shows USB+Cable in any sequence: (usb+cable or cable+usb)

And the result show:

01 > Cable Printer Black USB
04 > USB Extension Cable

I tried with REGEXP, but it shows any register with the 2 terms, but I need ALL terms in the result, not ANY.

SELECT * FROM tbproducts WHERE product REGEXP 'USB|Cable'

Show:

01 > Cable Printer Black USB
02 > Power Cable for PC
03 > Headset with microphone USB blue
04 > USB Extension Cable

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

静谧 2025-01-20 13:47:48

使用 [Full TEX INDEX][1] 你会更高兴,

但是你可以执行以下操作

创建表 tbproducts (
  ‘ID’ 整数,
  `产品` VARCHAR(32),
    全文(`产品`)
);

插入 tbproducts
  (`ID`,`产品`)
价值观
  ('01', '有线打印机黑色 USB'),
  ('02', 'PC 电源线'),
  ('03', '带麦克风 USB 蓝色的耳机'),
  ('04', 'USB 延长线');
从 tbproducts 中选择 *,其中产品 REGEXP '(USB.*Cable|Cable.*USB)'

<前>ID |产品
-: | :----------------------
1 |有线打印机黑色 USB
4 | USB延长线

从 tbproducts t1 中选择 *
WHERE EXISTS(从 tbproducts t2 中选择 1,其中 Product LIKE '%USB%' AND t1.`ID` = t2.`ID`)
AND EXISTS(从 tbproducts t2 中选择 1,其中产品如“%Cable%”AND t1.`ID` = t2.`ID`)

<前>ID |产品
-: | :----------------------
1 |有线打印机黑色 USB
4 | USB延长线

更新添加完整文本搜索以确保完整性

SELECT * FROM tbproducts WHERE MATCH (Product) AGAINST ('+USB +Cable' IN BOOLEAN MODE);

<前>ID |产品
-: | :----------------------
1 |有线打印机黑色 USB
4 | USB延长线

db<>fiddle 此处

You will be more happy, using a [Full TEX INDEX][1],

But you can do following

CREATE TABLE tbproducts (
  `ID` INTEGER,
  `Product` VARCHAR(32),
    FULLTEXT (`Product`)
);

INSERT INTO tbproducts
  (`ID`, `Product`)
VALUES
  ('01', 'Cable Printer Black USB'),
  ('02', 'Power Cable for PC'),
  ('03', 'Headset with microphone USB blue'),
  ('04', 'USB Extension Cable');
SELECT * FROM tbproducts WHERE Product REGEXP '(USB.*Cable|Cable.*USB)'
ID | Product                
-: | :----------------------
 1 | Cable Printer Black USB
 4 | USB Extension Cable    
SELECT * FROM tbproducts t1
WHERE EXISTS (SELECT 1 FROM tbproducts t2 WHERE Product LIKE '%USB%' AND t1.`ID` = t2.`ID`)
AND EXISTS (SELECT 1 FROM tbproducts t2 WHERE Product LIKE '%Cable%'AND t1.`ID` = t2.`ID`)
ID | Product                
-: | :----------------------
 1 | Cable Printer Black USB
 4 | USB Extension Cable    

Update add full TEXT search for completeness

SELECT * FROM tbproducts WHERE MATCH (Product) AGAINST ('+USB +Cable' IN BOOLEAN MODE);
ID | Product                
-: | :----------------------
 1 | Cable Printer Black USB
 4 | USB Extension Cable    

db<>fiddle here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文