Как избежать дублирования с MySQl в Auto-предложить - PullRequest
1 голос
/ 18 июня 2011

Как я могу избежать дублирования возвращаемых данных с 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 ]

1 голос
/ 18 июня 2011

Что я вижу в вашем коде, так это то, что в наборе результатов SQL, который вы используете в коде PHP, есть только одно поле - title. Так почему бы не написать свой запрос так:

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

Или, возможно, если вы не можете изменить запрос, вы можете сохранить title в массиве PHP и затем запустить array_unique, чтобы избежать дублирования перед записью их в HTML.

1 голос
/ 18 июня 2011

В идеале вам нужно выбрать отдельные элементы

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

Конечно, если по какой-либо причине вы не можете этого сделать, поместите данные в массив и проверьте, были ли они ранее добавлены для предотвращения дублирования, определите массив вне времени

    $data = array()
    if (!in_array($row["title"], $data)){
     \\do your thing
       array_push($data, $row["title");
     }
1 голос
/ 18 июня 2011

При просмотре вашего кода кажется, что вы используете только поле "title" из своей базы данных.Вы можете сделать это:

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

Согласно документации MySQL :

Параметры [...] DISTINCT определяют, следует ли возвращать дублирующиеся строки,[...] DISTINCT определяет удаление повторяющихся строк из набора результатов.Ошибочно указывать обе опции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...