Я хочу, чтобы в моем поиске отображались только результаты с соответствующими значениями полей. Как это сделать? - PullRequest
0 голосов
/ 26 октября 2011

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

У меня есть два поля поиска:

«поиск» и «поисковый запрос»

имена полей в моей базе данных

имя Фамилия электронная почта

Так, например:

Если я ищу

«mike» в «поиске» и «smith» в «поисковом запросе». Единственные результаты, которые я хочу показать, - это результаты, соответствующие «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's 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);

?>

Ответы [ 3 ]

2 голосов
/ 26 октября 2011

Изменение:

WHERE  name LIKE '%". mysql_real_escape_string($search) ."%'";

К:

WHERE  name LIKE '%". mysql_real_escape_string($search) ."%' AND lastname LIKE '%". mysql_real_escape_string($search) ."%'";
1 голос
/ 26 октября 2011

Изменение:

$search = addcslashes($search,'%_');
$searchterm = addcslashes($searchterm,'%_');

$search = "%" . $_POST["search"] . "%";
$searchterm = "%" . $_POST["searchterm"] . "%";

Кому:

$search = "%" . addcslashes($_POST["search"],'%_'). "%";
$searchterm = "%" . addcslashes($_POST["searchterm"],'%_'). "%";
1 голос
/ 26 октября 2011
$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, прежде чем я узнал о матче с. Конечно, было бы полезно знать рано. Надеюсь, это поможет.

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