2

请帮忙,我对我的情况很困惑。

我开始创建一个搜索功能,但我不确定最好的方法。在前端用户将能够在文本字段中输入单词,然后这些将搜索 MYSQL 数据库,如下所示:

在此处输入图像描述

因此他们搜索“成人”并列出“名称”列中带有“成人”的每个 item_id(主键)。或者他们输入“黑色”并列出“颜色”中带有“黑色”的每个 item_id。或者他们输入“成人蓝”,每一个带有“成人”“蓝”的项目都会出现。我相信你明白了。

我已经阅读了多种方法,但我不知道哪种方法最好:

使用MANY TO ONE表:这似乎可行,但有超过 500 个独特的项目,所以会有成千上万的行。对于 item_id 1,我必须为“成人”制作一行,为“牛仔布”制作一行,为“裤子”制作一行,为“黑色”制作一行,为“红色”制作一行,为“蓝色”制作一行。我还不如硬编码一切。

使用FIND_IN_SET:这行得通吗?我是否必须用逗号存储值并分隔Adult,Denim,PantsEXPLODE?我打算尝试这种方法,但我一直在阅读,在一个字段中存储多个值是非常糟糕的做法。

还是我正在寻找的正则表达式?

存储值的最佳方式是什么,检索它们的最佳方式是什么?我不是要求确切的代码,只是要使用的方法。任何建议表示赞赏!

4

2 回答 2

2

因此,如果我们假设这些列name并且colors是我们需要搜索的唯一列,我会执行以下操作(天真的解决方案,但如果您的数据库没有数百万行并且您没有数千名客户,则可以正常工作一次搜索)。

一、创建视图

CREATE VIEW SearchHere AS
SELECT item_id, CONCAT(name, ' ', colors) AS FullDescription
FROM table

我不知道您屏幕截图中的表格名称,所以我使用table它作为它的名称。

现在,如果用户搜索adult red pants您可以发出查询

SELECT item_id
FROM SearchHere
WHERE FullDescription LIKE '%adult%'
AND FullDescription LIKE '%red%'
AND FullDescription LIKE '%pants%'

当然,您需要即时生成查询,但这不是问题。您可以在通配符符号和搜索词之间使用AND或放置空格。可能您还希望以更复杂的方式进行视图,例如,做更多的事情。OR%CONCAT

于 2013-10-14T13:56:52.983 回答
1

一个简单的解决方案是使用

name REGEXP 'the|search|terms'
OR colors REGEXP 'the|search|terms'

不过,您应该解释一下您所说的“最佳”是什么意思——最快的性能?最容易维护?其他?

于 2013-10-14T13:56:03.720 回答