-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 に答える