php - 使用 PHP MySql 进行关键字搜索?

标签 php mysql search

我的 mysql 表中有标题 (varchar)、描述 (text)、关键字 (varchar) 字段。

我保留了关键字字段,因为我认为我只会在这个字段中搜索。但我现在需要在所有三个字段中进行搜索。因此,对于关键字“word1 word2 word3”,我的查询变为

SELECT * FROM myTable
WHERE (
name LIKE '%word1%' OR description LIKE '%word1%' OR keywords LIKE '%word1%' 
OR name LIKE '%word2%' OR description LIKE '%word2%' OR keywords LIKE '%word2%' 
OR name LIKE '%word3%' OR description LIKE '%word3%' OR keywords LIKE '%word3%') 
AND status = 'live'

看起来有点乱,但这可行。但现在我需要实现同义词搜索。因此,对于给定的单词,假设有一些可用的同义词,当我循环遍历所有单词时,此查询会变得更加困惑。随着需求变得越来越清晰,我还需要将此 myTable 加入到其他一些表中。

所以

  • 您是否觉得上面的方式很乱,并且随着数据的增长会出现问题?

  • 如何避免上述困惑?我可以采用更清洁的解决方案吗?任何例子都会对我有帮助。

  • 您可以向我推荐其他方法/技术吗?

感谢

编辑

@Peter Stuifzand 建议我创建一个 search_index 表并存储所有 3 个字段(标题、关键字、描述)信息并进行全文搜索。据我所知,此外该表还将包含对 myTable 主键的引用。

但是我的高级搜索可能包括将 mytable 与类别表、地理位置表(用于在 10、20 英里等范围内搜索)连接、按其他条件进行过滤,当然还有对搜索结果进行排序。你认为使用mysql fulltext不会减慢速度吗?

最佳答案

当您的查询失去控制时,有时最好用 SQL 编写部分查询,而用您选择的编程语言编写其他部分。

您还可以使用全文搜索进行搜索。您可以创建包含要搜索的所有字段的单独表,并添加 FULLTEXT 修饰符。

CREATE TABLE `search_index` (
    `id` INT NOT NULL,
    `data` TEXT FULLTEXT,
);

SELECT `id` FROM `search_index` WHERE MATCH(`data`) AGAINST('word1 word2 word3');

关于php - 使用 PHP MySql 进行关键字搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/980376/

相关文章:

php - Wordpress 警告 : call_user_func_array() expects parameter 1 to be a valid callback, 数组必须恰好有两个成员

mysql - 使用 Windows XP、Qt Creator 4.5.2(windows 32 位)的 QT MySql 连接

MySQL - 每3小时的数据平均值?

php - 棘手的 MySQL 搜索

php - 如何在页面加载时自动聚焦 div

apache - 在特定文件夹中使用自定义 php.ini

mysql - 如何为mysql中的子查询赋予默认值?

c - 在已排序和旋转的数组中搜索元素

ruby-on-rails - Rails Postgres 按子字符串查找属性(多个单词)

php - 如何在 OpenCart .tpl 文件中获取当前 url?