0

有没有可能在 SQL 问题中获得 where 语句匹配的百分比?

类似于 PHP 函数 similiar_text ( http://php.net/manual/en/function.similar-text.php )

我的想法是,在 SQL 问题中,检查 where 语句是否匹配超过 95%,然后它应该继续。

这可能吗?如果是,我该怎么办?

编辑:

表:汽车

id type description
1 Toyota Nice car that runs very fast and have a big engine.

然后我的字符串包含以下 $description = '非常非常漂亮的汽车,运行速度非常快,引擎非常大。

如果有任何描述与我的 $description 字符串存在的任何描述相似,我想检查表“汽车”。如果没有,则应将其添加到表中。如果有 95% 或更多匹配,则不应将其添加到表中

EDIT2: 我的代码现在看起来像这样:

$query = $this->db->query('SELECT * FROM table
                            WHERE MATCH (title)
                            AGAINST ("The test text here " IN NATURAL LANGUAGE MODE)');

$i = 1;

foreach ($query->result() as $row)
{
    echo $i . '. ';
    echo $row->title;
    echo "<br>";

    $i++;
}

上面的代码首先给了我“最匹配”的结果,然后是第二个,依此类推。现在我把它打印出来了。我看到了一个解决方案,我在第一个匹配项上使用 PHP 函数similar_text 并获得匹配的百分比。之后我可以决定它是否匹配 95% 或更多我想将帖子添加到 DB 。但是有没有办法让我不在我的 PHP 代码中这样做,而是在 SQL 问题中这样做?

4

2 回答 2

1

您需要做的是使用全文搜索。文档在这里

使用常规 SQL,您无法真正做您想做的事。SQL 语言只是没有支持详细文本分析的原语。

全文搜索有两种模式。您可能想要自然语言版本。

于 2013-08-02T12:45:58.290 回答
0

for example if you have a table named users you can do something like this:

$where = $db->query("SELECT * FROM users WHERE username LIKE '%mo%'")->rowCount();
$all = $db->query("SELECT * FROM users")->rowCount();
$percentage = ($where / $all) * 100;
于 2013-08-02T12:14:37.907 回答