我是php和mySQL的新手,所以请原谅我,如果这是一个简单或常见的问题,但我看了一遍,找不到答案。
基本上,我正在建立一个快速搜索房地产页面,有人可以输入地址,搜索结果会显示出来(如果他们输入广泛的类似“90th street”的话,也会有相似的结果)
现在我的查询看起来像这样。 ($ QuickSearch是他们输入的值。)
$query = "SELECT * FROM MLSSales WHERE (ID = '$QuickSearch') or (concat_ws(' ',StreetNum, StreetName) like '%$QuickSearch%');
现在这个搜索适合我,但问题是StreetName列中的某些列表包含“West”或“East”等字样。如果有人搜索“West 90th Street”,“300 West 90th Street”,“300 West 90th”等内容。我的搜索工作。但如果他们输入类似“300 90th Street”的内容,我就不会得到结果。
如何使搜索稍微宽松一点而不会使其变得如此宽松,以至于会导致不良结果。
答案 0 :(得分:0)
您需要的是全文搜索,或操纵搜索文本以使其更加通配。
您的查询归结为
... like '%300 90th Street'
只有当这3个单词彼此完全相邻且它们之间只有一个空格时才有效。
全文搜索会将其视为
... like '%300%' or like '%90th%' or like '%Street%'
(作为一个非常hacky的例子)。如果您不能在此表上使用FULLTEXT索引,那么您可以尝试自己进行一些预处理,将搜索短语中的每个单词转换为自己的“like”子句。性能会很糟糕,因为`%...%'子句不能使用索引,但允许任意匹配。
答案 1 :(得分:0)
我强烈反对使用“WHERE column1 LIKE'%blah%'”表达式编写自己的全文搜索引擎。你会遇到各种问题,包括词干,拼写错误等。
MySQL已有一个。它是使用MATCH()语法的那个。看起来你只想要精确匹配。 MySQL支持 - 您可以过滤掉匹配分数较低的记录。有关详细信息,请参阅手册的此页面:http://dev.mysql.com/doc/refman/5.5/en/fulltext-natural-language.html
示例:
CREATE TABLE articles (
-> id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
-> title VARCHAR(200),
-> body TEXT,
-> FULLTEXT (title,body)
-> ) ENGINE=MyISAM;
mysql> INSERT INTO articles (title,body) VALUES
-> ('MySQL Tutorial','DBMS stands for DataBase ...'),
-> ('How To Use MySQL Well','After you went through a ...'),
-> ('Optimizing MySQL','In this tutorial we will show ...'),
-> ('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
-> ('MySQL vs. YourSQL','In the following database comparison ...'),
-> ('MySQL Security','When configured properly, MySQL ...');
mysql> SELECT id, body, MATCH (title,body) AGAINST
-> ('Security implications of running MySQL as root'
-> IN NATURAL LANGUAGE MODE) AS score
-> FROM articles WHERE MATCH (title,body) AGAINST
-> ('Security implications of running MySQL as root'
-> IN NATURAL LANGUAGE MODE);
+----+-------------------------------------+-----------------+
| id | body | score |
+----+-------------------------------------+-----------------+
| 4 | 1. Never run mysqld as root. 2. ... | 1.5219271183014 |
| 6 | When configured properly, MySQL ... | 1.3114095926285 |
+----+-------------------------------------+-----------------+