2

好吧,我遇到的问题主要是由于数据库结构不良引起的。我正在为一家代码非常混乱且表格非常大的公司编写此代码,因此我认为这不是修复结构的选择。

无论如何,我的问题是我试图以某种方式对字符串中不会单独存在的值进行分组......他们正在存储用逗号分隔的值......所以它就像

field: "category" value: 'var1, var2, var3'

我将使用以下查询进行搜索:

SELECT name, category 
FROM companies 
WHERE (MATCH(name, category) AGAINST ('$search' IN BOOLEAN MODE) 
       OR category LIKE '$search%')

它将与例如 var2 匹配(但它不限于 3 个变量,可以是单独的或更多),我会在 PHP 中手动拆分它,没问题。虽然我不会得到足够的匹配,但我希望通过不同的搜索获得例如 10 个匹配。更具体地说,我正在制作一个自动建议功能,这意味着例如我想将“moto%”与摩托车、单独的电机或其他任何东西相匹配,但我一直得到相同的值,就像会有几个 100结果包含“摩托车”,我不知道如何过滤它们,因为由于数据库结构不好,我无法使用 GROUP BY...

我发现了这个:T-SQL - GROUP BY with LIKE - 这可能吗? 它似乎是一个解决方案,但据我尝试,我无法让它与我想要的一起工作。

所以我想知道有哪些解决方案......如果绝对没有办法解决这个问题,我可能不得不修复数据库结构(但这真的必须是最后一个选择)

4

3 回答 3

2

开始采取措施使数据库结构正确。制作一个额外的表格并用拆分值填充它。

然后您可以使用适当的查询来选择您需要的数据。您和下一个开发人员将来在这个项目上的麻烦都会减少,更不用说查询速度的提高了。

于 2013-03-20T12:00:05.973 回答
0

我不知道为什么我不能写评论,但也许你可以试试这个:

SELECT name, category FROM companies WHERE category LIKE '$search%' or LOCATE('search', category)>0;

如果在类别中出现您的任何“搜索”值,那将看起来。

于 2013-03-20T12:07:21.533 回答
0

我不得不同意您应该使数据库正确。它会为您节省很多麻烦和时间。但是,使用SELECT DISTINCT可能会解决您的直接问题。

于 2013-03-20T12:08:30.937 回答