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

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

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

«поиск» и «поиск»

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

name lastname email

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

Если я ищу

«mike» в «поиске» и «кузбе» в «поисковом выражении» единственными результатами, которые я хочу показать, являются результаты, которые соответствуют «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); ?> 

Solutions Collecting From Web of "Я хочу, чтобы мой поиск показывал только результаты с соответствующими значениями полей. Как это делается?"

Изменить:

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

Для того, чтобы:

 WHERE name LIKE '%". mysql_real_escape_string($search) ."%' AND lastname LIKE '%". mysql_real_escape_string($search) ."%'"; 
 $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, прежде чем я узнал о матче против. Конечно, было бы полезно знать рано. Надеюсь, поможет.

Изменить:

 $search = addcslashes($search,'%_'); $searchterm = addcslashes($searchterm,'%_'); $search = "%" . $_POST["search"] . "%"; $searchterm = "%" . $_POST["searchterm"] . "%"; 

Для того, чтобы:

 $search = "%" . addcslashes($_POST["search"],'%_'). "%"; $searchterm = "%" . addcslashes($_POST["searchterm"],'%_'). "%";