Mysql高效多个OR请求

时间:2013-06-06 15:16:36

标签: php mysql

我有一个查询,搜索搜索字段的各个列

SELECT *
FROM $sql_word_query[$count]
WHERE word=\"$word_to_check\"
OR plural=\"$word_to_check\"
OR present_tense=\"$word_to_check\"
OR past_tense=\"$word_to_check\"
OR present_participle=\"$word_to_check\"
OR past_participle=\"$word_to_check\"

$count从数组中获取表名。

这非常慢,当我添加最后OR部分时,我现在得到了

  

警告:mysql_fetch_array()要求参数1为资源,第159行/home/englishw/public_html/app/word.php中给出布尔值

是否有更有效的扫描方式?

2 个答案:

答案 0 :(得分:1)

SELECT * 
FROM $sql_word_query[$count] 
WHERE 
\"$word_to_check\" IN (word, plural, present_tense, past_tense, present_participle, past_participle)

是的,您可以使用IN()交换列和参数。

要么

column IN (parameter1, parameter2,...)

parameter IN (column1, column2, ...)

后者是更方便的方式,这不会使查询更快。对于这个问题,我们必须查看表中存在哪些索引以及EXPLAIN SELECT ...的结果。

请注意,您的查询容易受到SQL注入攻击。

答案 1 :(得分:0)

使用IN语法:

SELECT * FROM table WHERE word IN('one', 'two', 'three')

如果在添加最后一个OR子句时它开始出错,那么您可能没有名为past_participle的字段。检查MySQL错误消息以获取更多详细信息。