Mysql
 sql >> Base de données >  >> RDS >> Mysql

Différences de chaînes PHP et restrictions dynamiques

quand Christopher Johnson McCandless est mappé sur {1}{2} :

combinaison possible pour former deux groupes est :

  • Christopher Johnson et McCandless
  • Christopher et Johnson McCandless

quand cinema tomorrow at night est mappé sur {3}{4}

combinaison possible pour former deux groupes est :

  • cinema et tomorrow at night
  • cinema tomorrow et at night
  • cinema tomorrow at et night

Écrivez une fonction PHP dans get_possible_groups($string_of_words, $group_count) renvoie tableau de tableau de combinaisons de groupes.

et une instruction SQL comme :

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');

une sortie possible peut être :

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

selon celui qui compte 2 (groupes de deux mots), c'est votre réponse.

Si MODEL le texte est un fulltext colonne indexée, alors pour toute chaîne aléatoire donnée, vous pouvez obtenir le modèle le plus pertinent comme :

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

la requête peut vous renvoyer quelque chose comme :

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

Extraire les mots d'une chaîne aléatoire à l'aide d'espaces réservés de 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());
?>

Le code ci-dessus vous donnera des valeurs comme :

'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
  • à partir de là, vous pouvez appeler get possible groupings
  • puis une requête SQL pour vérifier les correspondances possibles autorisées
  • mots réels dans les groupes requis.

Hélas, c'est une question, hein !