Я хочу, чтобы в моем поиске отображались только те результаты, которые соответствуют значениям в той же строке.
У меня есть два поля поиска:
'search' и 'search term'
имена полей в моей базе данных
имя Фамилия электронная почта
Итак, например:
Если я ищу
'mike' в 'search' и 'smith' в 'search term', единственные результаты, которые я хочу показать, - это результаты, которые соответствуют "mike smith", не показывающие результаты, такие как "mike harris"
Как это достигается?
Спасибо!
Джеймс
<?php
$conn = mysql_connect("", "", "");
if (!$conn) {
echo "Unable to connect to DB: " . mysql_error();
exit;
}
$search = addcslashes($search,'%_');
$searchterm = addcslashes($searchterm,'%_');
$search = "%" . $_POST["search"] . "%";
$searchterm = "%" . $_POST["searchterm"] . "%";
if (!mysql_select_db("")) {
echo "Unable to select mydbname: " . mysql_error();
exit;
}
$search = $_POST['search'];
$searchterm = $_POST['searchterm'];
$sql = "SELECT name,lastname,email
FROM test_mysql
WHERE name LIKE '%". mysql_real_escape_string($search) ."%'";
$result = mysql_query($sql);
if (!$result) {
echo "Could not successfully run query ($sql) from DB: " . mysql_error();
exit;
}
if(empty($_GET['search'])){ // or whatever your field name is
echo 'no results';
}else{
performSearch(); // do what you're doing right now
}
if (mysql_num_rows($result) == 0) {
echo "No rows found, nothing to print so am exiting";
exit;
}
while ($row = mysql_fetch_assoc($result)) {
echo '<br><br><div class="data1">';
echo htmlentities($row["name"]);
echo '</div><br><div class="data2">';
echo htmlentities($row["lastname"]);
echo '</div><br><div class="data3">';
echo htmlentities($row["email"]);
echo '</div>';
}
mysql_free_result($result);
?>
Изменить:
WHERE name LIKE '%". mysql_real_escape_string($search) ."%'";
To:
WHERE name LIKE '%". mysql_real_escape_string($search) ."%' AND lastname LIKE '%". mysql_real_escape_string($search) ."%'";
if($search === '' && $searchterm === '') { ... do something here ... } else { run query }
. Имейте в виду, что люди могут отправить символ%, который также будет соответствовать всему, не знаю, является ли это проблемой для вас.
Изменить:
$search = addcslashes($search,'%_');
$searchterm = addcslashes($searchterm,'%_');
$search = "%" . $_POST["search"] . "%";
$searchterm = "%" . $_POST["searchterm"] . "%";
To:
$search = "%" . addcslashes($_POST["search"],'%_'). "%";
$searchterm = "%" . addcslashes($_POST["searchterm"],'%_'). "%";
$sql = "SELECT name,lastname,email
FROM test_mysql
WHERE name LIKE '%". mysql_real_escape_string($search) ."%'
AND name LIKE '%". mysql_real_escape_string($searchterm) ."%'";
Кроме того, когда я просматриваю ваш запрос, вы можете также рассмотреть возможность сопоставления с именем. В вашем примере предлагается, что вы можете искать имя и фамилию, но запрос только сравнивает имя.
Я часто создаю поле под названием "поиск" в моих таблицах с возможностью поиска, а затем устанавливаю их как полный текстовый индекс, поэтому я могу использовать mysql MATCH AGAINST для более надежного поиска.
http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html
Это было некоторое время в моей разработке php, прежде чем я узнал о совпадении. Конечно, было бы полезно знать рано. Надеюсь, что это поможет.