我需要使用从表单输入的单词查询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一起存在于同一行。
如果有人输入两个或三个单词,这需要工作。通常他们只进入两个。
感谢您的帮助。
答案 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 *
,始终指定要输出的列。