0

我正在为社区中的一些农民构建一个数据驱动的网站(使用 PHP 和 MySQL)(嗯,是 - 你会在一秒钟内看到)。他们希望能够列出他们的产品,并让人们搜索这些产品,然后他们的名字就会出现,并附有一个链接到详细说明他们所有产品的页面。

虽然我知道这将是一个很长的列表,但我想,“由于对 mysql 数据库的每次搜索都很挑剔 - 包括区分大小写 - 我将按字母顺序列出一个列表,人们可以从下拉框中选择他们想要的搜索。没问题。”

嗯,现在是个问题。他扩大了网站的参数。他现在想包括手工和自制产品。不用说,我们从几十个潜在产品变成了数百个,现在下拉列表不再可行。但是,如果我使用文本字段供访问者搜索站点,除非他们键入时没有拼写错误并使用相同的大小写,否则他们将无法从搜索中获得准确的结果。

谁能推荐另一种方法?我知道“LIKE”搜索,但它并不能真正解决我的问题 - 特别是因为它可能会在搜索中产生误报。任何帮助将不胜感激,谢谢!

4

2 回答 2

0

我会使用两个表:

  • 一个包含所有可能的搜索词
  • 一个包含任何适用术语的同义词(例如“手工制作”和“自制”)

在文本框中输入字符时,使用 AJAX 从第一个表中搜索值。使用以下方法返回可能的术语列表:

从 search_table 中选择术语,其中术语如 '%<input string>%'

仅当您的点击数少于 10 次时才开始返回值。(当他们输入 2 个字母时,IE 不会填充)。然后,当输入特定术语时,在第二个表中搜索同义词并将其包含在搜索中。在结果页面中,表明您包含了同义词,并且可能在每个同义词旁边加上一个“X”以选择重新搜索那些被排除的。

请注意,“like”不区分大小写。

于 2013-03-12T17:46:10.940 回答
0

好吧,这个问题有点模糊,因为您正在谈论多个搜索参数。

它更多的是一种设计选择。例如,考虑以下情况:

  • 对于诸如“自制”或“手工”之类的项目,可能在输入字段下方,您应该有一个复选框,人们可以在其中向搜索添加其他标志
  • 比如说,按名称“John Smith”搜索并勾选“handmade”和“homemade”
  • 数据库中的“手工”和“自制”字段将始终相同(开/关)

所以,一个sql查询可能是这样的:

SELECT * FROM products WHERE farmername LIKE '%$search%' AND handmade = 'handmade'

或者,在输入数据时,如果勾选了handmade,则在handmade中插入一个整数,其中1表示勾选handmade,0表示不勾选handmade

因此,您的查询将变为 AND handmade = 1(或 0)表示非手工制作

这些只是一些让您前进的想法,但这更多的是设计决策而不是数据库决策,您如何创建表以使用标志

于 2013-03-12T14:45:03.217 回答