3

MySQL クエリを改善しようとしています。

    SELECT gamename
    FROM giveaway
    WHERE gamename LIKE '$query'

次のような形式の URL で構成される入力を取得しました。

URL からゲーム名を取得し、これを SQL クエリの入力として使用します。

  • $query = "明白な光景"
  • $query = "テックス・マーフィー火星人覚書"
  • $query = "フライン"
  • $query = "ペンギン アリーナ セドナの世界"

データベースでは、一致する名前に ' ! などの文字が含まれることがあります。

例:

  • 「プレーンサイト」
  • 「テックス・マーフィー:火星人覚書」
  • 「フライン」
  • 「ペンギンアリーナ:セドナの世界!」

そのため、URL から取得した名前を入力すると、2 番目、3 番目、4 番目の例では結果が得られません。だから私がしたことは、%文字を使用することでした。

  • $query = "plain%sight"
  • $query = "tex%murphy%martian%memorandum"
  • $query = "フライン"
  • $query = "penguins%arena%sednas%world"

これにより、1 番目と 2 番目の例の結果が得られます。

.

私の質問に:

私の質問は、3 番目と 4 番目のものも機能するようにこれを改善するにはどうすればよいですか?

各文字の前後に % を追加することを考えています:

  • $query = "%f%l%y%n%"
  • $query = "%p%e%n%g%u%i%n%s%a%r%e%n%a%s%e%d%n%a%s%w%o%r%l %d%"

しかし、それがどのようにパフォーマンスを向上させるのか、これが最善の解決策であるかどうかはわかりません。

% を追加することは良い解決策ですか?

うまく機能するクエリを作成する方法に関するその他のヒントはありますか?

進捗:

少しテストした後、多くのワイルドカード (%) を追加することはお勧めできないことがわかりました。データベースから予期しない結果が返されることがあります。これは、単純に、多くの一致方法を追加したためです。

slug メソッドを使用することが唯一のオプションのようです。

4

1 に答える 1