如何用PHP正确构建MySQL搜索字符串?

时间:2011-12-17 04:58:53

标签: php mysql search

我想了解当我想要查找多个列时,用php构造查询字符串的最佳方法是什么。

例如,数据库有id,name,email,date。

我在页面上有一个搜索输入字段,在提交时,我希望它根据上面提到的列的输入字段进行搜索。最好的方法/做法是什么?

到目前为止,我有以下内容,但似乎这是一个“愚蠢”的搜索。

"SELECT * FROM Table WHERE id LIKE '$search%' || name LIKE '$search%' || email LIKE '$search%' || date LIKE '$search%'";

这种作品很好但我觉得必须有更好的方法和更合适的智能方法。

...谢谢

2 个答案:

答案 0 :(得分:1)

当您查询多个列而不使用AND(您正在使用OR)时,无法使mysql正确使用索引

总是需要优化您的查询策略,总是人们认为数据很小,
为什么要花费精力去优化...但事实是你不知道你的数据何时会增长

对于您的查询,如果您想坚持LIKE,
那么你需要在4列上构建4个索引,

alter table Table add index on(id);
alter table Table add index on(name);
alter table Table add index on(email);
alter table Table add index on(date);

并将查询更改为: -

SELECT * FROM Table WHERE id LIKE '$search%'
union distinct 
SELECT * FROM Table where name LIKE '$search%'
union distinct 
SELECT * FROM Table where email LIKE '$search%'
union distinct 
SELECT * FROM Table where date LIKE '$search%'

What is Union ?

偏离话题: -

  • 你没有为用户输入转义,它可能导致SQL注入
  • 当输入可以是任何内容时,
  • 对于搜索ID毫无意义
  • 同样去约会

答案 1 :(得分:0)

几年前我发现自己也在问同样的问题。对于您正在寻找的功能,最有效的方法是全文搜索。当然,这是以太空为代价的。我没有找到任何其他有效实现这一点的方法。抱歉,我不知道mysql是否支持fts。