这是我当前的查询MySQL,最快捷的方式选择一个短语作为单独的单词?
WHERE Keywords.Word = '$search'
但如果$search
这只能是一个字,如果两个或三个词,那么它不会发现任何东西作为我的关键字表字场只有每记录一个字。
最快的方法是什么?
这是我当前的查询MySQL,最快捷的方式选择一个短语作为单独的单词?
WHERE Keywords.Word = '$search'
但如果$search
这只能是一个字,如果两个或三个词,那么它不会发现任何东西作为我的关键字表字场只有每记录一个字。
最快的方法是什么?
取决于你的编程语言,拆分搜索项到一个数组中,并使用IN
条款:
WHERE Keywords.Word IN ('$search[0]','$search[1]',...)
嗯,我很困惑,我会认为它会匹配其他人的第一件作品。我使用的第一个单词在数据库中是独一无二的,第二个单词是一个非常流行的单词。它没有显示出第一份工作的结果。有什么我可以做的改进呢? – Jules 2011-03-14 09:06:59
IN
条款不会给你最好的性能。你可以看看my answer on this other question。
我会根据搜索条件创建虚拟表,并根据表列添加联接。
喜欢的东西
SELECT *
FROM table t
LEFT JOIN (SELECT 'term1' AS name
UNION
SELECT 'term2' AS name
UNION
SELECT 'term3' AS name) f
ON f.name = w.Word
WHERE (f.name IS NOT NULL)
GROUP by t.id
在这种情况下,你会动态地构建虚拟表中的值静态硬编码值(term1,2,3),你需要在以下几列添加索引
id
的'$'表示你直接在你的SQL语句中插入值。您的代码可能容易受到[SQL注入](http://unixwiz.net/techtips/sql-injection.html)的影响,这是一个非常严重的[安全风险](http://bobby-tables.com/)。防止注入的最好方法是使用准备好的语句(尽管它们仅通过简单的值来帮助注入;其他部分的语句,如表和列名称,以及复合值通常仍需要插值),您的数据库访问提供者应该支持。如果没有,则使用过时的DA提供程序。 – outis 2011-03-14 08:17:36
谢谢你,我使用'$ search = mysql_real_escape_string($ search);'我希望是足够好的 – Jules 2011-03-14 09:12:38
转义工作,但很容易忘记,这不是准备好的语句的问题。另外,如果您多次执行相同的查询,则预处理语句更具性能。 – outis 2011-03-14 20:35:23