我有一个查询,搜索搜索字段的各个列
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中给出布尔值
是否有更有效的扫描方式?
答案 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错误消息以获取更多详细信息。