对不起,我是这样的新手。
我无法理解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));
答案 0 :(得分:0)
您似乎正在向后搜索。语法是
SELECT ... MATCH (field1, field2, ... , field N) AGAINST ('search string')
您正在做的似乎相当于
SELECT ... MATCH(y, n, y, y, ....) AGAINST ('field2 field2 ... fieldN')
由于您极不可能在表中包含名为y
和n
的字段,因此,由于未知/不存在的字段,您最终会出现mysql语法错误。< / p>
如果您的脚本中有甚至MINIMAL错误处理,例如
$result = mysql_query($sql) or die(mysql_error());
^^^^^^^^^^^^^^^^^^^^^^
你被告知错误。 从不假设成功。总是假设失败,并将成功视为一个惊喜。