MYSQL搜索字段方法

时间:2013-10-14 13:43:07

标签: mysql database search

请帮助,我对我的情况非常困惑。

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

enter image description here

所以他们会搜索“成人”,并列出“name”列中包含“Adult”的每个item_id(主键)。或者他们输入“黑色”,并列出“颜色”中每个带有“黑色”的item_id。或者他们输入'Adult Blue'和每个项目,其中'Adult' Blue会出现。我相信你明白了。

我已经阅读了多种方法,但我无法弄清楚哪种方法最好:

使用 MANY TO ONE 表:这似乎可行,但有超过500个独特的项目,因此将有成千上万的行。对于item_id 1,我必须为'Adult'创建一行,为'Denim'创建一行,为'Pants'创建一行,为'black'创建一行,为'red'创建一行,为'blue'创建一行。我不妨对所有内容进行硬编码。

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

正则表达式我在寻找什么?

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

2 个答案:

答案 0 :(得分:2)

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

首先,创建一个视图

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%'

当然,您需要动态生成查询,但这不是问题。您可以使用ANDOR并在wildcrad符号%和搜索字词之间放置空格。也许您还希望以更复杂的方式进行视图,例如,只做CONCAT

答案 1 :(得分:1)

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

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

你应该以最好的方式解释你的意思 - 最快的表现?最容易维护?其他