如何在表中搜索多行?

时间:2013-07-29 04:29:35

标签: mysql select

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

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

(`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>

3 个答案:

答案 0 :(得分:0)

您在寻找concat

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

  

'...但这只允许我按分区或俱乐部搜索而不是两者......'

您可以使用单词拆分搜索字符串,然后使用类似

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

这是 SQLFiddle 演示