获取价值:
我有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]
有效(我从 中获得百分比),但查询有点难看,我不能使用正确的键来获取值,就像我可以用于其他两项一样。
有没有办法以某种方式获得一个很好的参考?
我试过:
$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 行的数据库,就像 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");
这肯定会花费两倍的时间,就好像我只计算过一次一样?类似于$i < sizeof($arr);
在 for 循环中?