sql >> データベース >  >> RDS >> Mysql

PHP文字列の違いと動的な制限

    Christopher Johnson McCandlessの場合 {1}{2}にマップされます :

    2つのグループを形成するための可能な組み合わせは次のとおりです。

    • Christopher Johnson およびMcCandless
    • Christopher およびJohnson McCandless

    cinema tomorrow at night {3}{4}にマッピングされます

    2つのグループを形成するための可能な組み合わせは次のとおりです。

    • cinema tomorrow at night
    • cinema tomorrow およびat night
    • cinema tomorrow およびnight

    PHP関数をget_possible_groups($string_of_words, $group_count)に記述します グループの組み合わせの配列の配列を返します。

    および次のようなSQLステートメント:

    SELECT count(*), 'cinema' firstWordGroup, 'tomorrow at night' secondWordGroup
      FROM possibleMatchTable
     WHERE possible_match IN ('cinema', 'tomorrow at night')
    UNION
    SELECT count(*), 'cinema tomorrow', 'at night'
      FROM possibleMatchTable
     WHERE possible_match IN ('cinema tomorrow', 'at night')
    UNION
    SELECT count(*), 'cinema tomorrow at', 'night'
      FROM possibleMatchTable
     WHERE possible_match IN ('cinema tomorrow at', 'night');
    

    考えられる出力の1つは次のとおりです。

    +----------+--------------------+-------------------+
    | count(*) | firstWordGroup     | secondWordGroup   |
    +----------+--------------------+-------------------+
    |        2 | cinema             | tomorrow at night |
    |        0 | cinema tomorrow    | at night          |
    |        0 | cinema tomorrow at | night             |
    +----------+--------------------+-------------------+
    

    カウント2(2つの単語グループ)のどちらかがあなたの答えです。

    MODELの場合 テキストはfulltext インデックス付きの列を指定すると、任意のランダムな文字列に対して、次のような最も関連性の高いモデルを取得できます。

    SELECT * FROM model_strings 
    WHERE MATCH(model) AGAINST ('Damn you Spar, Kot will kill you.');
    

    クエリは次のようなものを返す可能性があります:

    +----------------------------------+
    | model                            |
    +----------------------------------+
    | Damn you {1}, {2} will kill you. |
    +----------------------------------+
    

    Modelからプレースホルダーを使用してランダムな文字列の単語を抽出する :

    <?php 
    
    $placeholder_pRegEx = '#\{\d+\}#';
    
    $model = 'Damn you {1}, {2} will kill you. {3}{4}{5}';
    $string = 'Damn you Spar, Will will kill you. I Love it man.';
    
    $model_words = explode(' ', $model);
    $string_words = explode(' ', $string);
    
    $placeholder_words = array();
    
    for ($idx =0, $jdx=0; $idx < count($string_words); $idx ++) {
    
        if ($jdx < count($model_words)) {
            if (strcmp($string_words[$idx], $model_words[$jdx])) {
                $placeholder_words[] = $string_words[$idx];
    
                //Move to next word in Model only if it's a placeholder
                if (preg_match($placeholder_pRegEx, $model_words[$jdx]))
                    $jdx++;
    
            } else
                $jdx++; //they match so move to next word
        } else
            $placeholder_words[] = $string_words[$idx];
    }
    
    //Even status will have the count
    $status = preg_match_all ($placeholder_pRegEx, $model, $placeholders);
    
    $group_count = count($placeholders[0]);
    
    var_dump(get_defined_vars());
    ?>
    

    上記のコードは、次のような値を取得します:

    'placeholder_words' => array (size=6)
      0 => string 'Spar,' (length=5)
      1 => string 'Will' (length=4)
      2 => string 'I' (length=1)
      3 => string 'Love' (length=4)
      4 => string 'it' (length=2)
      5 => string 'man.' (length=4)
    
    'placeholders' => array (size=1)
      0 => 
        array (size=5)
          0 => string '{1}' (length=3)
          1 => string '{2}' (length=3)
          2 => string '{3}' (length=3)
          3 => string '{4}' (length=3)
          4 => string '{5}' (length=3)
    
    'group_count' => int 5
    
    • そこからget possible groupingsを呼び出すことができます
    • 次に、許可された一致の可能性をチェックするSQLクエリ
    • 必要なグループの実際の単語。

    ああ、それはいくつかの質問です、ええ!




    1. K-PostGISの最近傍クエリ

    2. MySQLテーブルからの一意性制約の削除

    3. 事前入力されたデータベースの更新

    4. MariaDBによるデータベースの破損:テーブルがエンジンに存在しません