【问题标题】:Searching for a keyword across multiple columns [closed]跨多个列搜索关键字[关闭]
【发布时间】:2016-04-03 01:06:31
【问题描述】:

我的学校表中的每一行都存储了一组机构名称。同一张表有四个不同的类别列,用于存储他们提供的主题的名称。我想启用一个功能,用户在表格上进行搜索以找出教授特定学科的所有机构的名称(例如:物理学)。特定主题的名称可以存储在四个category 列中的任何一个中。请建议一个 mysqli_/mysql_ 查询来进行此类搜索,或者如果您愿意,请建议一个可以实现上述功能的 PHP 脚本。
编辑:我提到下面的表结构:
Table showing column values
Table structure

添加我尝试过的所有不同查询但没有结果:

$query = mysql_query("SELECT name FROM institutes WHERE MATCH(category1, category2, category3, category4) AGAINST('$searchq' IN BOOLEAN MODE)") or die(" No records found.");


$query = mysql_query("SELECT name FROM institutes WHERE $searchq IN(category1, category2, category3, category4)") or die(" No records found.");


$query = mysql_query("SELECT name FROM institutes WHERE category1 LIKE '%$searchq%' OR category2 LIKE '%$searchq%' OR category3 LIKE '%$searchq%' OR category4 LIKE '%$searchq%' OR category5 LIKE '%$searchq%'") or die(" No records found.");

搜索表单:

<div class="row col-md-6 col-md-offset-2">
        <div class="col-lg-6">
            <div class="input-group">
                <form action="search_results.php" method = "post">
                    <input type="text" name="search" class="form-control" placeholder="Search by subjects...">

                <span class="input-group-btn">
                    <button class="btn btn-default" type="button submit">Go!</button>
                </span>
                </form>

            </div><!-- /input-group -->
        </div>
    </div>

整个PHP代码:

<?php
    mysql_connect("localhost", "root", "secretpassword") or die("could not connect.");
    mysql_select_db("edhoc") or die("could not find database.");
    $result = "";

    //collect info from database
    if(isset($_POST['search'])) {
      $searchq = $_POST['search'];
      $searchq = preg_replace("#[^0-9a-z]#i", "", $searchq);
      //echo $searchq;

      //SQL query
      $query = mysql_query("SELECT name FROM institutes WHERE category1 = '$searchq' OR category2 = '$searchq' OR category3 = '$searchq' OR category4 = '$searchq' OR category5 = '$searchq'") or die(" No records found.");
      $count = mysql_num_rows($query);
      if($count == 0) {
          $output = "There's no search result";
      } else {
          while($array = mysql_fetch_assoc($query)) {
?>
              <li><?php echo $array['name'];?></li>
<?php
          }
      }
    }
?>

它们都没有产生所需的输出。 当physics 是搜索字符串时,当前输出为:

物理 没有找到记录。

physics 是搜索字符串时,所需的输出是:

  • Bansal Classes 学习中心
  • Resonance Eduventures Pvt Ltd


【问题讨论】:

  • 这是您在 24 小时内第三次问同样的问题。这(多次问同一个问题)在 Stack Overflow 上被认为是非常粗鲁的。
  • @NineBerry 我很抱歉。我无意无礼。如果有的话,我很绝望。
  • 1.见标准化。绝望。
  • 如果启用 echo $searchq 输出是什么?我怀疑它是空的。没有输入发送到名称搜索的表单,或者您只是在编辑错误的文件。添加带有“test”之类的字符串的回显,以查看您是否实际上正在处理正在执行的文件。

标签: php mysql database mysqli


【解决方案1】:

我们不太可能回答,因为您没有提供易于阅读的表结构,所以我假设一个。

Select school from schooltable where subject1=? or subject2=? or subject3=?

?是搜索查询,如果您无法在此处的 php 回复中实现它,我会为您编写。 如果我没有得到你,那是你没有解释清楚的问题。

【讨论】:

  • 我已经编辑了问题并添加了尽可能多的信息(连同表格结构)。是的,如果您可以编写一个获得所需结果的 php 代码,那将是一种解脱。
  • 你试过我发的那个吗?
  • 试一试 query = mysql_query("SELECT name FROM Institutes WHERE category1 = '%$searchq%' OR category2 = '%$searchq%' OR category3 = '%$searchq%' OR category4 = '%$searchq%' OR category5 = '%$searchq%'") 或 die(" 未找到记录。");
  • 不走运。我现在已经在问题中添加了整个 PHP 代码。我开始相信其他地方有问题,而不是查询。你认为数据库本身有问题吗?你认为我的 PHP 代码有问题吗?
  • 能否请您上传数据库并在此处提供链接,我认为它有问题。
【解决方案2】:

你有以下命令:

$query = mysql_query("SELECT ....") or die("No records found.");

但是,当 die 部分被执行时(似乎是因为“No records found”被输出),那么这并不意味着没有找到记录。这意味着执行sql语句时出错。所以要么是sql语句出错,要么是数据库连接有问题。像这样修改该行以获得特定的错误消息:

$query = mysql_query("SELECT ....") or die(mysql_error());

由于 sql 语句失败,但您仍然列出了相同的五个机构名称(甚至在错误消息之前),这意味着您看到的机构名称列表不是来自您问题中的 php 代码,而是来自其他地方.

【讨论】:

  • 你帮我修好了,差不多。但首先,我会澄清我的错误。存储数据库的包含文件有一个自己的选择语句,一旦建立连接,就会打印出所有的 insti 名称。接下来,我从代码中删除了 category5 检查,这是我在从数据库中删除“category5”列后不小心忘记删除的。在进行必要的代码更正后,我得到了正确的输出,但这是一方面。在输出上方,有文本“1Resource id #6”为什么会显示以及如何删除?
  • 输出“1Resource id #6”意味着您在某处回显了一个变量,该变量是 mysql_connect() 或 mysql_query() 等函数的返回值,因此请查找您回显返回的变量的位置来自这些类型的函数。
  • 两者都是粗心的错误,我很抱歉浪费大家的时间。将来我会尝试发布更多的智力问题。当我获得足够的声誉时,我会回到这里并支持你的答案。谢谢你,我希望你能想象我是多么的如释重负。其他新用户注意:不要发布感谢信息。
猜你喜欢
  • 2010-12-22
  • 2011-03-17
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多