-3

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

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 中给出

这种扫描有更有效的方法吗?

4

2 回答 2

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 注入的攻击。

于 2013-06-06T15:21:35.107 回答
0

使用 IN 语法:

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

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

于 2013-06-06T15:21:39.123 回答