MySQL match()对() - 按分数排序?

时间:2014-11-06 20:41:54

标签: php mysql

对不起,我是这样的新手。 我无法理解match()against()

我有一组10个变量,基本上是10个问题的答案。 我想将它们与MYSQL表匹配,然后按降序选择5个最相关的结果。

我还想显示每个结果的得分百分比。

变量是:

$a1 = y;
$a2 = n;
$a3 = n;
$a5 = y;
.
.
.
$a10 = n;

我的表结构是这样的:

PERSON_NAME, AGE, A1, A2, A3, A5... A10

我想要显示的结果是这样的:

彼得史密斯(100%匹配)

Jane Gray(65%匹配)

Jill Sanders(30%匹配)

为什么这不起作用?

这是我的代码:

$query = "SELECT *, MATCH($a1,$a2,$a3, $a4,$a5,$a6,$a6,$a7,$a8,$a9,$a10) AGAINST('A1, A2, A3, A4, A5, A6, A7, A8, A9, A10') AS score FROM table_name WHERE MATCH($a1,$a2,$a3, $a4,$a5,$a6,$a6,$a7,$a8,$a9,$a10) AGAINST('A1, A2, A3, A4, A5, A6, A7, A8, A9, A10') ORDER BY SCORE DESC";

$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
---------
$max_score = 0;
$data = array();

do {
    if ($row['score'] > $max_score) { 
        $max_score = $row['score'];
    }
    echo $row['PERSON_NAME']." ".@number_format(($row['score']/$max_score)*100,0)."%<br>n";
} while ($row = mysql_fetch_assoc($result));

1 个答案:

答案 0 :(得分:0)

您似乎正在向后搜索。语法是

SELECT ... MATCH (field1, field2, ... , field N) AGAINST ('search string')

您正在做的似乎相当于

SELECT ... MATCH(y, n, y, y, ....) AGAINST ('field2 field2 ... fieldN')

由于您极不可能在表中包含名为yn的字段,因此,由于未知/不存在的字段,您最终会出现mysql语法错误。< / p>

如果您的脚本中有甚至MINIMAL错误处理,例如

$result = mysql_query($sql) or die(mysql_error());
                           ^^^^^^^^^^^^^^^^^^^^^^

你被告知错误。 从不假设成功。总是假设失败,并将成功视为一个惊喜。