【问题标题】:How do I search a table for multiple rows?如何在表格中搜索多行?
【发布时间】:2013-07-29 04:29:34
【问题描述】:

所以这是我关于 stackoverflow 的第一个问题,我已经搜索了一天,但找不到我正在寻找的结果。我不是在找人为我编写代码,因为我更喜欢自己解决问题,但我正在寻找一些帮助来寻找如何去做。

我的问题是我不知道如何用我的搜索来寻找我正在寻找的东西,这就是我想要做的。我希望能够使用诸如“U10 Mustangs”之类的关键字来搜索 MySQL 数据库,其中 U10 将是名为“divisions”的行中的数据,而 Mustangs 将是名为“club”的行中的数据,我知道我可以使用像这样的 OR 语句

(`division` LIKE '%".$query."%') OR (`club` LIKE '%".$query."%')

但这仅允许我按部门或俱乐部进行搜索,不能同时进行搜索。所以基本上我正在寻找一个教程来向我展示如何通过多个关键字进行搜索。我确定我的措辞是错误的,这就是为什么我无法找到我想要的。

我是 MySQL 和 PHP 的新手,所以如果这没有任何意义,请理解!

*更新* 这是我的搜索代码:

    <body>
<?php include 'menu.php';?>
<br/><br/><br/>
<div id="searchcontainer" style="width: 55%; height: 132px;">
<fieldset style="width: 330px"><legend>Search Criteria</legend>
<form action="search.php" method="POST">
<td>Enter Search</td><td>&nbsp; <input type="text" name="query"/></td><td>  <input type="submit" name="submit" id="table_button" value="Search" action="search.php"/></td>
<br />
</form>
</fieldset><br/>
<fieldset><legend>Search Results</legend>
<?php
        include 'connect/local_connect.php';

    $query = $_POST['query']; 
    // gets value sent over search form

   // $min_length = 3;
   // you can set minimum length of the query if you want

   // if(strlen($query) >= $min_length){ // if query length is more or equal minimum length then

        $query = htmlspecialchars($query); 
        // changes characters used in html to their equivalents, for example: < to &gt;

        $query = mysql_real_escape_string($query);
        // makes sure nobody uses SQL injection

        $raw_results = mysql_query("SELECT * FROM players
            WHERE (`team_name` LIKE '%".$query."%' AND `division` LIKE '%".$query."%') OR (`last_name` LIKE '%".$query."%') OR (`division` LIKE '%".$query."%') ORDER by id ASC") or die(mysql_error());

        // * means that it selects all fields, you can also write: `id`, `first_name`, `any`
        // players is the name of our table



        if(mysql_num_rows($raw_results) > 0){ // if one or more rows are returned do following

        }
        else{ // if there is no matching rows do following
            echo "<font color=red>No Results!</font>";
      ?><br/><br/>
      <?php

    }
   // else{ // if query length is less than minimum
   //     echo "Minimum length is ".$min_length;
   // }


        // Define $color=1 
        $color="1";
        echo '<table width="100%" border="1" align="center" cellpadding="0" cellspacing="0">';
        echo '<th>ID</th><th>Club</th><th>Last Name</th><th>First Name</th><th>Division</th>';
        while($rows = mysql_fetch_array($raw_results)){

        echo "<tr bgcolor='#fff000'>
        <td><center>".$rows['id']."</td></center><td><center>".$rows['club']."</center></td><td><center>".$rows['last_name']."</td></center><td><center>".$rows['first_name']."</center></td></td><td><center>".$rows['division']."</center></td></td></tr>";       
        }




        echo '</table>';
        mysql_close();
        ?>

</fieldset>
</div>
</body>

【问题讨论】:

  • 所以你想按单个词搜索?您可以将字符串拆分为“”。在 PHP 中可以使用 explode(" ", $String); 完成,但是在 mysql 中我不确定,但这可能会帮助您入门。
  • @FranciscoPresencia 谢谢,我实际上希望有人能指出一个好的教程的方向,因为我在这里和其他网站上阅读了很多问题,但仍然没有找到这样做的方法,因为我确定我问错了问题。基本上,我想在搜索框中输入类似 U10 Mustangs 的内容,然后返回包含所有 10 Mustangs 分区的结果。因为 U10 是一个部门,而 Mustangs 是一个俱乐部。
  • 如果你想要一个通用的搜索框,听起来你想要某种全文搜索。
  • 认真的吗?对我在这里的第一个问题投反对票?让我再也不想回到这里!
  • 我认为您过于重视基于一个人的意见的数字,而忽略了所有试图提供帮助的人。

标签: mysql select


【解决方案1】:

你在找concat

where CONCAT(`division`,' ',`club`) like '%".$query."%'

【讨论】:

    【解决方案2】:

    我会建议像这样FULLTEXT (club,division)创建一个关于分区和俱乐部的全文索引 并使用这样的查询进行搜索

    SELECT * FROM db
    WHERE MATCH (club,division)
    AGAINST ('search');
    

    【讨论】:

      【解决方案3】:

      '...但这只能让我按部门或俱乐部进行搜索不能同时搜索...'

      您可以将搜索字符串拆分为单词,然后使用这样的条件

      SELECT * 
        FROM table1
       WHERE (division LIKE '%U10%' AND club LIKE '%Mustang%')
          OR (division LIKE '%Mustang%' AND club LIKE '%U10%')
      

      这里是SQLFiddle演示

      【讨论】:

      • 感谢您的回复,已经很接近了,但我仍然希望他们自己也能够按部门或俱乐部进行搜索。根据您上面的内容,我可以做这样的事情吗? WHERE (division LIKE '%".$query"%' AND club LIKE '.$query"%')
      • @user2447848 从技术上讲你可以,但恕我直言,它不会产生任何有意义的结果。现在,为了节省一些宝贵的猜测时间并帮助您更快地得到答案,请edit您的问题并添加相关的示例数据(可以是几行数据)、示例搜索关键字以及基于两者的期望结果。
      • @peterm 抱歉,我有一个朋友发布了我的代码,因为我无法通过手机执行此操作,因此它显示为他的帐户。但我没有看到带有代码的编辑,所以我不确定他是否发布了它。无论哪种方式,它都会在那里。
      • @user2587858 很好,您发布了您的代码,但它没有多大帮助。我要求提供相关的样本数据(实际或虚假的数据行)、样本搜索字符串、和期望的结果
      • @peterm 我不知道该怎么做。对不起,我不想浪费你的时间,我会根​​据我到目前为止从这个问题中得到的信息尝试自己研究更多。感谢您的帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-02
      • 2011-03-12
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多