html — поиск в PHP, отображающий повторяющиеся результаты, не похожие на запрос

Так что я просто пытаюсь создать базовую панель поиска, чтобы увеличить свои знания PHP и MySQL, но я серьезно запутался.

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

У меня есть 2 разных человека с двумя разными продуктами, которые ссылаются на них, и это то, что он показывает.

введите описание изображения здесь

И вот запрос, который я ищу.

введите описание изображения здесь

и вот мой код, и я надеюсь, что кто-то с большим знанием мог бы помочь, надеясь, что это не просто простая ошибка, которую я сделал: O

<?php
$query = $_GET['q'];
// gets value sent over search form

$min_length = 3;
// you can set minimum length of the query if you want

if(strlen($query) >= $min_length){ // if query length is more or equal minimum length then

$query = htmlspecialchars($query);
// changes characters used in html to their equivalents, for example: < to &gt;

$query = mysql_real_escape_string($query);
// makes sure nobody uses SQL injection

$raw_results = DB::query("SELECT  * FROM forsale, users WHERE forsale.productname LIKE '%" . $query .  "%' OR users.username LIKE '%" . $query ."%'");

if (count($raw_results) > 0) {
foreach($raw_results as $results) {

echo $results['productname'];
echo $results['username'];
echo $results['price'];

}
}else{ // if there is no matching rows do following
echo "No results";
}
}else{ // if query length is less than minimum
echo "Minimum length is ".$min_length;
}

?>

Заранее большое спасибо.

0

Решение

Чтобы быстро проверить, работает ли он, вам нужно связать две таблицы вместе, используя user_id …

$raw_results = DB::query("SELECT  *
FROM forsale, users
WHERE forsale.user_id = users.user_id
and (forsale.productname LIKE '%" . $query .  "%'
OR users.username LIKE '%" . $query ."%'"));

Я хотел бы рекомендовать перейти на более новый формат JOIN (https://dev.mysql.com/doc/refman/8.0/en/join.html), а также изучение использования подготовленных операторов и связывания переменных.

1

Другие решения

Попробуй это:

$raw_results = DB::query("SELECT f.* FROM forsale f LEFT JOIN users u ON f.user_id = u.id WHERE f.productname LIKE '%" . $query . "%' OR u.username LIKE '%" . $query ."%'");

Вам нужно на самом деле LEFT JOIN их для того, чтобы запрос работал.

0

По вопросам рекламы [email protected]