使用php使用更多关键字搜索mysql数据库
基于种姓、宗教、地点、性别、年龄,我需要从数据库中筛选数据,我应该如何做 在mysql数据库中,宗教、性别、位置、年龄作为同一个表中的独立列 我用过的代码使用php使用更多关键字搜索mysql数据库,php,mysql,search,Php,Mysql,Search,基于种姓、宗教、地点、性别、年龄,我需要从数据库中筛选数据,我应该如何做 在mysql数据库中,宗教、性别、位置、年龄作为同一个表中的独立列 我用过的代码 $result=mysql_query("SELECT * FROM enquiry where location like '%$text%'and gender like'%$text1%' ") or die
$result=mysql_query("SELECT * FROM enquiry where location like '%$text%'and gender like'%$text1%' ")
or die("error");
$found=mysql_num_rows($result);
if($found>0){
while($row=mysql_fetch_array($result)){
//display of data
}
使用这个我可以搜索数据从一列使用一个关键字…因为我是新的请给我正确的方法来解决这个使用php 使用OR运算符
$result=mysql_query("SELECT * FROM enquiry where location like '%$text%' OR caste like '%$text%' OR religion like '%$text%' OR gender like '%$text%' OR age like '%$text%'")
or die("error");
$found=mysql_num_rows($result);
if($found>0){
while($row=mysql_fetch_array($result)){
//display of data
}
尝试创建动态查询这里是一个示例查询,您可以根据需要详细说明。这里我假设您正在通过表单从用户获取要搜索的数据 现在我们所要做的就是检查用户是否填写了特定字段,并相应地创建查询。这样,您的查询就不会变得不必要的复杂
$sql = "SELECT * FROM table_name ";
if( isset($_REQUEST['location']) && $_REQUEST['location'] != '' ){
if( strpos($sql, "WHERE") ){
$sql .= "AND WHERE location like '%$text%'";
}else{
$sql .= "WHERE location like '%$text%'";
};
}
if( isset($_REQUEST['religion']) && $_REQUEST['religion'] != '' ){
if( strpos($sql, "WHERE") ){
$sql .= "AND WHERE religion like '%$text%'";
}else{
$sql .= "WHERE religion like '%$text%'";
}
}
$result=mysql_query( $sql ) or die("error");
请按以下方式尝试全文搜索:-
$q="your search value";
$searchArray = explode(" ", $q);
$query="SELECT * FROM cmusers WHERE MATCH (`firstname`, `lastname`,`email`) AGAINST ('";
$i=0;
foreach ($searchArray as $word) {
$query .= "*".$word."* ";
}
$query .= "' IN BOOLEAN MODE)";
这将根据所有列搜索所有关键字
但这需要表myisam
engine
默认情况下,大多数表都带有innoDB引擎,所以您可以通过此更改引擎
ALTER TABLE table_name ENGINE = MYISAM;
我遇到了同样的问题,并提出了以下解决方案
//Building the Query
if (!empty($_POST['location'])) {
$location=$_POST['location'];
$sql[] = "enquiry.location = '%$location%'";
}
if (!empty($_POST['religion'])) {
$religion=$_POST['religion'];
$sql[] = "enquiry.religion = '%$religion%' ";
}
if (!empty($_POST['gender'])) {
$gender=$_POST['gender'];
$sql[] = "enquiry.gender LIKE '%$gender%'";
}
//etc...
if (!empty($sql)) {
$built_query = "SELECT * FROM `enquiry`";
//This implodes the sql array creating the WHERE statement with appended AND statements
$built_query .= " WHERE " . implode(' AND ', $sql);
} else {
$built_query = "SELECT * FROM `enquiry`";
}
$result = mysqli_query($conn, $built_query);
$total_records=$result->num_rows;
if ($total_records < 1) {
echo "No records found";
} else {
while ($row_result = $result->fetch_assoc()) {
//Whatever you want to do with the data
}
//生成查询
如果(!空($_POST['location'])){
$location=$_POST['location'];
$sql[]=“enquiry.location='%$location%'”;
}
如果(!空($_POST['religation'])){
$religure=$_POST['religure'];
$sql[]=“enquiry.relighty='%$relighty%'”;
}
如果(!空($_POST['gender'])){
$gender=$_POST['gender'];
$sql[]=“inquiry.gender类似“%$gender%””;
}
//等等。。。
如果(!empty($sql)){
$build_query=“从‘查询’中选择*”;
//这会使sql数组内爆,从而创建带有附加AND语句的WHERE语句
$build_query.=“WHERE.”内爆('AND',$sql);
}否则{
$build_query=“从‘查询’中选择*”;
}
$result=mysqli\u查询($conn,$build\u查询);
$total_records=$result->num_行;
如果($total_records<1){
回显“未找到记录”;
}否则{
而($row\u result=$result->fetch\u assoc()){
//不管你想对数据做什么
}
或者其他类似“%$text%”的列怎么样?我不明白你的问题…或者…位置REGEXP“text1 | text2 | text3”
或者位置在('text1'、'text2'、'text3')
我从用户表单中获取文本数据。我必须从数据库中选择位置为文本、性别为text1的数据,等等…@glowy.penguin我需要在所有这些字段中搜索不相同的文本…我必须将文本与位置、text1与性别等匹配…从数据库中筛选数据…这些文本、text1是我获取的项目rom用户搜索表单…@seliteI需要在所有这些字段中搜索不同的文本…我必须将文本与位置、文本1与性别等匹配…从数据库中筛选数据…这些文本、文本1是我从用户搜索表单中获得的项…。为此,我使用了我发布的代码,但似乎有错误@nikhilanya代码确实存在和您要求的完全相同,它将文本与位置相匹配,将text1与宗教相匹配。仅当用户指定一些详细信息时,才会生成“WHERE”子句子句确保只返回满足所有类别的结果。但是,如果您的需求是其他的,请尝试详细描述它,那么有必要指出,除了支持全文搜索外,myisam表也不太持久,并且不完全是事务性的……如果您习惯innodb,规则会改变e、 许多人使用单独的搜索服务,例如弹性搜索,与MySQL全文搜索相比,弹性搜索通常具有更好的性能和功能。