1

asを使用してデータベースからレコードを検索しますMySql-

SELECT * FROM tab WHERE col LIKE '%myvalue%';

これは正常に機能しており、myvalue.

問題は、 、 、および のようなレコードがmy'valueありmyva'luemyval-ueこれらmy-valueのレコードを検索に含めたいことです。また、検索するmy'valueと と が表示myvalueされmy-valueます。

これを達成する方法は?任意のヘルプ。LIKE演算子を使用して行うことは可能ですか?

4

4 に答える 4

2

PHPを使用しているため、誰かがあなたの検索を使用した場合は、次のことを行う必要があります。

  1. $_POST 経由で検索語を取得する
  2. 検索語からすべての特殊文字を削除します (my'valueになりますmyvalue)
  3. 検索語を MySQL ワイルドカード (myvalueになる%m%y%v%a%l%u%e%)に置き換えます。
  4. 実行するSELECT * FROM tab WHERE col LIKE '%m%y%v%a%l%u%e%'

他のソリューションはすべての要件に一致しません。

SQL フィドル: http://sqlfiddle.com/#!2/20f811/2

于 2012-11-29T10:49:15.620 に答える
1

使用する

SELECT * FROM tab WHERE col LIKE '%myvalue%' OR col LIKE '%my_value%'

アンダースコア_は、1 文字のワイルドカードです。

于 2012-11-29T10:32:56.320 に答える
0

これを得ました...

PHP 部分

$term = str_replace('-','',str_replace(',', '', str_replace('\'', '', $term)));

MySql パート

SELECT *
FROM tab
WHERE ((REPLACE(REPLACE(REPLACE(col, '\'', ''), ',', ''), '-', '') LIKE "%$term%") 
OR (col LIKE "%$term%"));

このデモを参照してください。

于 2012-12-07T05:34:30.770 に答える
0

これはどう?

SELECT * FROM tab WHERE col LIKE 'my%' OR col LIKE '%value'

colこれは、my で始まり、value で終わる必要があることを確認します。

デモ


編集 1

任意の特殊文字が存在する可能性があり、regexp は MySQL では機能しないため、特殊文字を null に置き換えてから文字列を myvalue に一致させることで、PHP で実現したいことを行うことをお勧めします。

これがお役に立てば幸いです。


編集 2

私はphpを正確に知りませんが、何をすべきかを少し教えてくれます。

mysql = "SELECT id, col FROM tab WHERE col LIKE '%my%' OR col LIKE '%value%'";
rs = mysql.execute();
String newString = "";
while (rs.next()) {
    newString = rs.getString(2);
    newString = new string after replacing special characters using regexp
    if (newString.equals("myvalue")) {
        // your code here..... this is place what you wanted.
    }
} 
于 2012-11-29T10:36:57.383 に答える