我有三个变量:
$school
$class
$subject
搜索字符串$searchquery
我想在我的数据库中搜索与搜索查询匹配的行...目前我使用的是:
$searchquery = str_replace(" ","|",$searchquery);
$sql = "
SELECT * FROM filedetails
WHERE school RLIKE '$searchquery'
OR class RLIKE '$searchquery'
OR subject RLIKE '$searchquery'";
现在,这是如何工作的,假设我输入Mathematics Class X
。它将字符串转换为Mathematics|Class|X
,这很好并搜索数据库并打印结果......
但是有一个错误:
它正在打印所有包含数学或类或X的行,因此我的输出包括所有数学学院的所有类和所有X类学校的所有科目...
我想让它向我展示所有有数学和X级的学校......
P.S。 - 我尝试使用AND代替OR,但现在我得到空结果,因为没有学校匹配我的查询字符串......
答案 0 :(得分:0)
一种方法是首先对所有数据搜索进行不同的二维数组,然后进行交集,这样就会得到匹配所有关键字的公共行......
$sql = "SELECT * FROM filedetails";
$query = mysql_query($sql);
$array1 = array();
while ($row = mysql_fetch_array($query))
{
$array1[] = $row;
}
$sql = "SELECT * FROM filedetails WHERE school RLIKE '$searchquery'";
$query = mysql_query($sql);
$array2 = array();
while ($row = mysql_fetch_array($query))
{
$array2[] = $row;
}
$sql = "SELECT * FROM filedetails WHERE subject RLIKE '$searchquery'";
$query = mysql_query($sql);
$array3 = array();
while ($row = mysql_fetch_array($query))
{
$array3[] = $row;
}
$sql = "SELECT * FROM filedetails WHERE class RLIKE '$searchquery'";
$query = mysql_query($sql);
$array4 = array();
while ($row = mysql_fetch_array($query))
{
$array4[] = $row;
}
现在,这段代码正在做什么,它为每个字段单独搜索并为每个字段的每个查询生成单独的结果,现在我们将采用数组的交集以获得具有关键字的公共行
但是有一个问题,假设$searchquery
包含有关School和Class的详细信息,但没有关于Subject的信息,那么$array3
将为null,因为查询将导致NULL,那么我们需要考虑处理已在Another Question Here ...
希望这有助于......:)