我试图找到搜索多列中单词出现的最佳方法。当然,一种选择是在查询中添加多个OR
:
SELECT * FROM table WHERE column1 LIKE %term1% OR column2 LIKE %term1% OR......
尽管如此,当有多个条款时,我认为这使查询变得相当长。
在我的搜索中,我发现了MYSQL中的CONCAT
函数。这似乎允许我在连接列后进行一次搜索(对吗?):
SELECT * FROM table WHERE CONCAT(column1,column2,....) LIKE %term1% OR CONCAT(column 1,column2,...) LIKE %term2% ....
这样做的优点是更易于阅读和维护。
因为我还不完全理解 CONCAT 的全部用途,所以我不知道是否这种方法是正确的。我想知道实现这种搜索的最正确和最有效的方法是什么。(注:我还计划按照这个 stackoverflow 问题中所述对其进行排序:mysql SORT BY amount of unique word matches,也许在使用该方法时存在问题?)
编辑:
也许直接解释我的最终愿望会更容易:在 PHP 中,我有一个单词数组。我希望选择所有在多列中出现过其中一个单词的数据库行,然后根据相关性对它们进行排序(甚至给某些列添加额外的重要性)。 (请注意,只需要搜索少于5000行数据)
OR LIKE
可能会使用索引,但这并不保证,在常见情况下,它不会使用索引。因此,两种方法都不好,唯一重要的事情可能是可读性。这是您需要做出的决定。 - Alma Do