値の取得:
ここからlevenshtein_ratio関数を取得し、MySQL データベースのキューに入れました。次の方法で実行します。
$stmt = $db->prepare("SELECT r_id, val FROM table WHERE levenshtein_ratio(:input, someval) > 70");
$stmt->execute(array('input' => $input));
$result = $stmt->fetchAll();
if(count($result)) {
foreach($result as $row) {
$out .= $row['r_id'] . ', ' . $row['val'];
}
}
そして、それはまさに期待どおりに機能します。levenshtein_ratio()
しかし、計算する値を取得する良い方法はありますか?
私はもう試した:
$stmt = $db->prepare("SELECT levenshtein_ratio(:input, someval), r_id, val FROM table WHERE levenshtein_ratio(:input, someval) > 70");
$stmt->execute(array('input' => $input));
$result = $stmt->fetchAll();
if(count($result)) {
foreach($result as $row) {
$out .= $row['r_id'] . ', ' . $row['val'] . ', ' . $row[0];
}
}
技術的には機能します ( からパーセンテージを取得し$row[0]
ます) が、クエリは少し見苦しく、適切なキーを使用して値を取得することはできません。他の 2 つのアイテムの場合と同様です。
どうにかして素敵なリファレンスを取得する方法はありますか?
私は試した:
$stmt = $db->prepare("SELECT r_id, val SET output=levenshtein_ratio(:input, someval) FROM table WHERE levenshtein_ratio(:input, someval) > 70");
オンラインで見つけたものをモデル化しましたが、うまくいかず、クエリ全体が台無しになりました。
高速化:
値の配列に対して次のクエリを実行しています。
foreach($parent as $input){
$stmt = ...
$stmt->execute...
$result = $stmt->fetchAll();
... etc
}
しかし、それは非常に遅くなります。わずか 14 の入力の配列と約 350 行の DB の場合、20 秒遅いように、すぐに 10,000 になると予想されます。クエリをループ内に配置するのは厄介な作業であることはわかっていますが、それを回避する方法が他にわかりません。
編集1
私が使うとき
$stmt = $db->prepare("SELECT r_id, val SET output=levenshtein_ratio(:input, someval) FROM table WHERE levenshtein_ratio(:input, someval) > 70");
一度だけ計算した場合と比べて、2 倍の時間がかかることは確かですか? $i < sizeof($arr);
forループにいるのと似ていますか?