获取语​​句与mysql匹配的百分比

时间:2013-08-02 12:09:55

标签: mysql where percentage

是否有可能获得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字符串中的任何描述相同,我想检查表“Car”。如果没有,则应将其添加到表中。如果有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%或更多,我想将帖子添加到数据库。但有没有办法让我不在PHP代码中执行此操作,而是在SQL问题中执行此操作?

2 个答案:

答案 0 :(得分:1)

您需要做的是使用全文搜索。文档为here

使用常规SQL无法实现您想要的功能。 SQL语言没有原语来支持详细的文本分析。

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

答案 1 :(得分:0)

例如,如果您有一个名为用户的表格,您可以执行以下操作:

$where = $db->query("SELECT * FROM users WHERE username LIKE '%mo%'")->rowCount();
$all = $db->query("SELECT * FROM users")->rowCount();
$percentage = ($where / $all) * 100;