首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据id或名称搜索某些采购订单

如何根据id或名称搜索某些采购订单
EN

Stack Overflow用户
提问于 2013-01-23 16:51:48
回答 2查看 94关注 0票数 0

我们希望使用单个搜索框根据采购订单id (主键)或采购订单名称过滤采购订单。

我们使用like参数在name字段上进行搜索,但它似乎不能在主键上工作。只有当我们对id(s)使用等于运算符时,它才有效。但如果我们可以使用like for id过滤采购订单,那将是更可取的。该怎么做呢?

代码语言:javascript
复制
create table purchase_orders (
id int(11) primary key,
name varchar(255),

...
)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-23 17:01:01

选项1

代码语言:javascript
复制
SELECT *
FROM purchase_orders
WHERE id LIKE '%123%'; -- tribute to TemporaryNickName

这在性能方面是可怕的:)

方案2a

添加一个文本列,该列接收id的字符串版本。也许可以添加一些触发器来自动填充它。

方案2b

id列的类型更改为CHARVARCHAR (我认为主键应首选CHAR )。

在两个2a中。和2b。案例,向该列添加一个索引(可能是FULLTEXT索引)。

票数 0
EN

Stack Overflow用户

发布于 2013-01-23 17:05:03

我觉得LIKE应该行得通。我假设您的SQL没有正确编写。假设您的订单名为"ABCDEF“,则可以使用以下查询结构找到它。

代码语言:javascript
复制
SELECT id FROM purchase_orders WHERE name LIKE '%CD%';

为了解释它,% sign表示它是一个通配符。因此,此查询将选择其中包含"CD“的任何字符串。

根据表结构,varchar可以包含255个字符。我认为这是一个相当大的字符串,它可能会消耗大量的资源,并且需要更多的时间来使用像这样的这样的SQL函数来搜索一些东西。你总是可以通过id来搜索它

WHERE id = something.顺便说一下,这是更快的方法

,但我不认为订单id是用户友好的数据,相反,我会让用户使用产品名称。我的建议是使用apache Lucene或MySQL的全文搜索功能(这可以提高搜索性能)。

Apache lucene

MySQL Full text search function

这些工具是为了通过大字符串列表以更快的方式搜索特定的模式或单词而构建的。许多网站使用它来构建自己的迷你搜索引擎。我发现mysql全文搜索功能几乎不需要学习曲线,直接使用=D

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14475639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档