<?php session_start();
$user =$_GET['user'];
$conn = mysql_connect("localhost","...","...");
mysql_select_db("...");
$sql= "SELECT filter FROM userfilter WHERE user='$user'";
$mksql = mysql_query($sql); while($row =mysql_fetch_assoc($mksql)) {
$filter=$row['filter'];
$sql2 = "SELECT DISTINCT * FROM rss WHERE MATCH(content,title) AGAINST ('$filter')";
$mksql2 = mysql_query($sql2) or die(mysql_error());
while($rows=mysql_fetch_assoc($mksql2))
{ echo ..... }
?>
如果我有两行内容包含$ filter,它会输出我的内容,但它正在重复。 例如:
标题|内容
asd |这是一个样本内容,排名第一
DAS |这是一个 样本内容,第二名
...
如果我的关键字是“样本”和“数字”,它会输出两倍的标题和内容。如何防止?
答案 0 :(得分:1)
您应该合并第一个结果,然后发出单个查询,而不是执行循环和查询
$filters = array();
while($row =mysql_fetch_assoc($mksql))
{
$filters[$row['filter']] = '+'.$row['filter'];
}
/* free result */
$sql2 = "SELECT * FROM rss ".
"WHERE MATCH(content,title) ".
"AGAINST ('".implode(' ', $filters)."' in boolean mode)";
...
答案 1 :(得分:0)
我认为这有效但可能不是最有效的方式:
SELECT *, MATCH(Description) AGAINST ('$filter') AS score FROM table
WHERE score > 1
GROUP BY score, id;
这样,每个ID每个匹配分数就会得到一行。