如何避免在自动建议中使用MySQl重复

时间:2011-06-18 18:58:55

标签: php jquery mysql autosuggest

如何使用此代码避免使用带有自动提示的MYSQL重复返回数据? 非常感谢您的帮助

   <?php
include('conn.php');
$str = strtolower($_GET['content']);         
if(strlen($str))
{
    $sel = mysql_query("select * from Streams where title like '".trim($str)."%'");
    if(mysql_num_rows($sel))
    {
        echo "<table border =\"0\" width=\"100%\">\n";
        if(mysql_num_rows($sel))
        {
            echo "<script language=\"javascript\">box('1');</script>";
            while($row = mysql_fetch_array($sel))
            {
                $country = str_ireplace($str,"<b>".$str."</b>",($row['title']));
                echo "<tr id=\"word".$row['title']."\" onmouseover=\"highlight(1,'".$row['title']."');\" onmouseout=\"highlight(0,'".$row['title']."');\" onClick=\"display('".$row['title']."');\" >\n<td>".$country."</td>\n</tr>\n";
            }
        }
        echo "</table>";
    }
}                                 
else
{
    echo "<script language=\"javascript\">box('0');</script>";
}
?>                                           

3 个答案:

答案 0 :(得分:1)

通过查看代码,您似乎只使用数据库中的“标题”字段。你可以这样做:

$sel = mysql_query("SELECT DISTINCT title FROM Streams WHERE title LIKE '".mysql_real_escape_string(trim($str))."%'");

根据MySQL documentation

  

[...] DISTINCT选项指定   是否应该重复行   回。 [...] DISTINCT指定   从中删除重复的行   结果集。指定是错误的   两种选择。

答案 1 :(得分:1)

我在代码中看到的是,您在PHP代码中使用的SQL结果集中只有一个字段 - title。那么为什么不把你的查询写成:

"SELECT DISTINCT `title`
FROM Streams 
WHERE title like '".trim($str)."%'"

或许如果您无法更改查询,可以将title存储在PHP数组中,然后在其上运行array_unique以避免重复,然后再将其写入HTML。

答案 2 :(得分:1)

理想情况下,您需要选择不同的元素

mysql_query("SELECT DISTINCT(title) FROM Streams WHERE title LIKE '".mysql_real_escape_string(trim($str))."%'");

当然,如果有任何理由你不能这样做, 将数据放入一个数组并检查它是否先前已添加以防止重复,在while

之外定义数组
    $data = array()
    if (!in_array($row["title"], $data)){
     \\do your thing
       array_push($data, $row["title");
     }