【问题标题】:I want my search to only show results with matching field values. How is this done?我希望我的搜索只显示具有匹配字段值的结果。这是怎么做到的?
【发布时间】:2011-10-25 22:25:07
【问题描述】:

我希望我的搜索仅显示与同一行中的值匹配的结果。

我有两个搜索字段:

“搜索”和“搜索词”

我的数据库中的字段名称是

名称 姓 电子邮件

例如:

如果我搜索

“搜索”中的“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);

?>

【问题讨论】:

  • 这个问题读起来很有趣,因为您的示例对 $searchterm 没有任何作用。我假设您已经尝试了一个简单的 AND 语句? "WHERE name LIKE '%".$search."%' AND name LIKE '%".$searchterm."%'" - 这两个词都是必需的。
  • 对不起,我对 mysql 很陌生,我昨天才开始。我如何适应 mysql_real_escape_string($search) ?我正在学习语法,不确定如何布局您刚才所说的内容?

标签: php mysql search


【解决方案1】:

变化:

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

收件人:

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

【讨论】:

  • 感谢我正在寻找的东西!发送空查询时,如何停止搜索返回所有数据库的结果?
  • 您将在运行代码之前检查 $search 和 $searchterm 变量:if($search === '' &amp;&amp; $searchterm === '') { ... do something here ... } else { run query }。请记住,人们可以发送一个 % 符号,它也将匹配所有内容,不知道这对您来说是否有问题。
  • 哦,如果他们发送'%',怎么能阻止它,所以他们不能返回所有东西
  • 停止使用LIKE?你真的需要吗?或者:$search = addcslashes($search, '%_');($searchterm 也一样)。这将添加一个反斜杠,以便 MySQL 将其解释为文字而不是通配符。
  • 对不起,我从昨天开始只使用 mysql,所以说不要使用 LIKE 是否只是在其中放一个不同的词而不是 LIKE 的问题?
【解决方案2】:
$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

在我了解 match against 之前,我花了一段时间进行 php 开发。早点知道肯定是有益的。希望对您有所帮助。

【讨论】:

  • 正是我需要的答案!发送空查询时,如何停止搜索返回所有数据库的结果?
  • 处理前的条件语句。 if(!empty($_POST['search'])){ your code here } ...但您可能希望变得更复杂,例如使用 php trim($_POST['search']) 来确保它不仅仅是白色空间。或 strlen($_POST['search']) 以确保它不止一个字符。等
  • 谢谢,你知道有什么好的网站可以帮助 mysql 初学者吗?
【解决方案3】:

变化:

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

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

收件人:

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

【讨论】:

  • 谢谢爱丽儿!我真的很感谢你的帮助。请在搜索字段中查看weezy.co.uk/newresults.php 搜索“%”。为什么右栏消失了?
  • 因为您执行了“未找到行,没有可打印的内容,因此正在退出” - 即您退出而不是跳过行显示,而是继续。
  • 啊,谢谢,我摆脱了那部分,现在可以正常工作了。我一直面临的另一个问题是我很难做到,所以当提交空搜索时没有结果显示?我用过样品,但我真的不确定如何让它发挥作用
  • @James 对不起,但这在这种媒体中是不实用的。你需要学习更多的编程。我只是在喂你代码,而不是你学习东西。
  • 有没有推荐给 mysql 初学者的书籍/网站?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-06
  • 2016-10-07
  • 1970-01-01
相关资源
最近更新 更多