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')
既然你不太可能在你的表中有名为y
和n
的字段,你最终会因为未知/不存在的字段而导致mysql语法错误。
如果您的脚本中甚至有最小错误处理,例如
$result = mysql_query($sql) or die(mysql_error());
^^^^^^^^^^^^^^^^^^^^^^
你会被告知有关错误。 永远不要成功。 总是假设失败,并将成功视为令人惊喜的事情。
链接地址: http://www.djcxy.com/p/75335.html