0

これについて少し助けてください、ここにその詳細があります

[Products]
id int
name text
category
color

問題はカラー フィールドの値です。サンプル値は次のとおりです。

  • GOLDRED
  • GOLD-RED
  • GOLD/RED
  • BLUE/GREEN-RED
  • WHITE GOLD-YELLOW/ORANGE

基本的な関数を使用して、このサンプルのような検索クエリを非常にきれいにすることができました

"select * from products where color=".cleanstring($stringval)." limit 1";

function cleanstring($var) {
    $newtext = $var;
    $newtext = preg_replace("/[^a-zA-Z0-9\s]/", "", $newtext);
    $newtext = str_replace(" ", "", $newtext);
    $newtext = strtoupper($newtext);
    return $newtext;    
}

問題は内容にあります。命名規則を使用する際の標準形式のない何千ものレコードです。

私のように値がきれいなレコードを選択したいと思いますcleanstring()

例:

Query = GOLDRED

選択可能

  • GOLD-RED
  • GOLD RED
  • GOLDRED
  • GOLD/RED
  • GOLDRED

あなたが推奨できる解決策はありますか?コードは PHP/MySQL です。

4

3 に答える 3

0

おそらく、「GOLD.?RED」または「GOLD(-|[[:space:]])?RED」を使用して MySQL 正規表現を作成できますか?

それは私が作ったオンラインの例です: http://regexr.com?34mmg

于 2013-04-27T12:43:43.440 に答える
0
"select * from products where 1".cleanstring($stringval);

function cleanstring($var) {
$color_list = array('GOLD','RED','GREEN','WHITE');

$sql_where='';
foreach( $color_list AS $v){
    if(strpos($var, $v)!==false){
    $sql_where .=" AND color LIKE '%{$v}%'";
    }

}
return $sql_where;

}
//select * from products where 1 OR color LIKE '%GOLD%' OR color LIKE '%RED%' 

述べる:

入力: ゴールドレッド、

マッチ: GOLD RED,GOLD-RED,GOLD/RED..... GOLD/RED/ABC,RED_GOLDGREEN,

すべてのデータを取得した後、検索エンジンのように一致率で機能ランキングを作成する場合があります

于 2013-04-27T03:46:06.707 に答える