PHP MYSQL搜索多个单词多列

时间:2016-08-11 20:08:44

标签: php mysql

我需要使用从表单输入的单词查询MYSQL数据库。我需要搜索数据库的两列,并在搜索表单中输入所有单词。第一列是记录号,第二列是描述。在这两列上搜索时,我需要搜索记录号模糊(%t%)并搜索完全匹配的描述。我需要查询来返回所有列中都包含所有这些单词的记录。

因此,如果我搜索C-101,查询将在两列中的一列中返回任何带有C-101的记录。如果我搜索C-101和螺丝,它将返回所有记录,其中包含两列中的所有记录。

我的代码现在无法正常运行:

$text = '';
$the_array = explode(' ', $formdata);
$i = 0;

foreach( $the_array AS $t ){
if( $i == 0 ){
$text .= " '%$t%' ";
$text2 .= " '$t%' ";
$i = 1;
}else{
$text .= " OR recordnumber LIKE '%$t%' ";
$text2 .= " AND description LIKE '$t%' ";
}
}

$sql = "SELECT * FROM drawrecord WHERE (recordnumber LIKE $text) OR (description LIKE $text2)";

使用此代码,如果我搜索C-101和螺丝,它将返回所有带有C-101或螺丝的记录。这是第一列中C-101的所有记录,第二列中有螺丝的所有记录,第一列中有C​​-101的所有记录,第二列中有螺丝。

我需要它来返回所有行,其中C-101和Screw一起存在于同一行。

如果有人输入两个或三个单词,这需要工作。通常他们只进入两个。

感谢您的帮助。

5 个答案:

答案 0 :(得分:0)

为您创建了一个示例,检查它是否适合您,

<?php

$formdata = "string1 string2 string3 string4 string5";

$text = '';
$text2 = '';
$the_array = explode(' ', $formdata);
$i = 0;

foreach( $the_array AS $t ){
    if( $i == 0 ){
        $text .= " '%$t%' ";
        $text2 .= " '$t%' ";
        $i = 1;
    }else{
        $text .= " OR recordnumber LIKE '%$t%' ";
        $text2 .= " AND description LIKE '$t%' ";
    }
}

echo $sql = "SELECT * FROM drawrecord WHERE (recordnumber LIKE ".$text.") OR (description LIKE ".$text2.")";

?>

答案 1 :(得分:0)

使用全文搜索,您可以实现此目的

$formdata = "string1 string2 string3 string4 string5";

$search_string = "+".str_replace(" "," +",$formdata);
//string will be become "+string1 +string2 +string3 +string4 +string5"

$sql = mysql_query("SELECT * FROM drawrecord WHERE  
                     MATCH ( recordnumber, description ) 
                     AGAINST ('".$search_string ."' IN BOOLEAN MODE);");

答案 2 :(得分:0)

以下对我有用: 首先,创建搜索按钮如下:

<form class="form-inline ml-auto" action="file_name.php">
    <input class="form-control mr-sm-2" type="text" placeholder="Search" name="Search">
    <button class="btn btn-info" type="submit" name="searchbutton"><i class="fa fa-search" aria-hidden="true"></i></button>
</form>

其次,使用以下php代码:

 <?php
if(isset($_GET['searchbutton'])) {
    $Search='%'.$_GET['Search'].'%';
    $query="SELECT * FROM table_name WHERE field_1 LIKE ?  
                                           OR field_2 LIKE ? 
                                           OR field_3 LIKE ? 
                                           OR field_4 LIKE ? 
                                           OR field_5 LIKE ? 
                                           ORDER by id desc";
    $stmt=$conn->prepare($query);
    $stmt->bind_param('sssss',$Search,$Search,$Search,$Search,$Search);
    $stmt->execute();
    $result=$stmt->get_result();
}
?>

答案 3 :(得分:-1)

你的sql中有错误..

$sql = "SELECT * FROM drawrecord WHERE (recordnumber LIKE $text) OR (description LIKE $text2)";

试试这个..

$sql = "SELECT * FROM drawrecord WHERE (recordnumber LIKE ".$text.") OR (description LIKE ".$text2.")";

希望这有帮助......:D

答案 4 :(得分:-1)

您需要在查询中连接字符串,而不是直接将它们放在里面。我假设这是问题所在。代码的其余部分在哪里执行查询?

$sql = "SELECT * FROM drawrecord WHERE (recordnumber LIKE ".$text.") OR (description LIKE ".$text2.")";

此外,请勿在查询中使用SELECT *,始终指定要输出的列。