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%比赛)

简·格雷(65%的比赛)

吉尔桑德斯(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));

你似乎在向后搜索。 语法是

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

你正在做的似乎是相当于

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

既然你不太可能在你的表中有名为yn的字段,你最终会因为未知/不存在的字段而导致mysql语法错误。

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

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

你会被告知有关错误。 永远不要成功。 总是假设失败,并将成功视为令人惊喜的事情。

链接地址: http://www.djcxy.com/p/75335.html

上一篇: MySQL match ( ) against ( )

下一篇: How to write the mysql query for return 4 rows exactly