我正在尝试创建一个搜索字段,用户可以在其中搜索使用特定元素的研究。
我有两个表:elements
和studies
。
elements
以研究的相关元素为特色,例如作者,操纵等。studies
具有关于主要研究者的相关信息,研究标题和摘要。
这样做的目的是,有时用户不仅要检查特定研究是否存在,而且该特定研究是否也使用特定元素。例如,研究可以以具有个人操纵或集体操纵的谈判游戏为特征。如果用户想要检查是否存在使用集体操作的协商研究,则查询不应返回使用单独操作的研究。
我可以创建一个搜索字段,用户可以按如下方式搜索研究:
if (isset($_POST['submit-search'])){
$search = mysqli_real_escape_string($conn, $_POST['search']);
$sql = "SELECT * FROM studies WHERE Author LIKE '%$search%' OR Study_Name LIKE '%$search%'
OR Abstract LIKE '%$search%'";
$result = mysqli_query($conn, $sql);
$queryResult = mysqli_num_rows($result);
if ($queryResult > 1){
echo "<h1 style='text-align: center;'>There are ".$queryResult." results.</h1>";}
elseif ($queryResult < 1) {
echo "<h1 style='text-align: center;'>There are ".$queryResult." results.</h1>";
} else {
echo "<h1 style='text-align: center;'>There is ".$queryResult." result.</h1>";
}
echo "<br>";
if ($queryResult > 0){
while ($row = mysqli_fetch_assoc($result)){
echo "<div class='w5-study' style='text-align: center;'>
<hr>
<table class='w3-table w3-striped w3-border'>
<tr>
<th>Author</th>
<th>Title</th>
<th>Abstract</th>
</tr>
<tr>
<td>".$row['Author']."</td>
<td>".$row['Study_Name']."</td>
<td>".$row['Abstract']."</td>
</tr>
</table>
</div>";
}
} else {
echo "<h1 style='text-align: center;'>Your query returned zero results.</h1>";
}
***编辑 - 感谢Whirl Mind
以下是我到目前为止的尝试:
if(isset($_POST['submit-advanced-search'])){
$search = mysqli_real_escape_string($conn, $_POST['search-advanced']);
$sqli = "SELECT * FROM studies S, elements E WHERE S.Studies_Element_ID = E.Elements_Element_ID And (S.Author LIKE '%$search%'
OR S.Study_Name LIKE '%$search%'
OR S.Abstract LIKE '%$search%') and (E.Element_Name LIKE '%$search%' OR E.Element_Author LIKE '%$search%'
OR E.Element_Source LIKE '%$search%' OR E.Element_Manipulation LIKE '%$search%'
OR E.Element_Scale LIKE '%$search%' OR E.Element_Type LIKE '%$search%')";
$results = mysqli_query($conn, $sqli);
$queryResulti = mysqli_num_rows($results);
if ($queryResulti > 0){
while ($row = mysqli_fetch_assoc($results)){
echo
"<div class='w5-study' style='text-align: center;'>
<hr>
<table class='w3-table w3-striped w3-border'>
<tr>
<th>Principal Investigator</th>
<th>Title</th>
<th>Abstract</th>
<th>Element</th>
<th>Author</th>
<th>Source</th>
<th>Manipulation</th>
<th>Scale</th>
<th>Type</th>
</tr>
<tr>
<td>".$row['Study_ID']."</td>
<td>".$row['Author']."</td>
<td>".$row['Study_Name']."</td>
<td>".$row['Abstract']."</td>
<td>".$row['Element_ID']."</td>
</tr>
</table>
</div>
";
}
}
else {
echo "<h1 style='text-align: center;'>Your advanced query returned zero results.</h1>";
}
}
但是,即使我输入了正确的参数,代码也会返回: 您的高级查询返回零结果。
我做错了什么?
答案 0 :(得分:0)
这是使用在两个表之间使用连接的SQL语句的情况。有点像:
检查查询是否返回两个表的结果 选项1 : 如果要求是这样,则应在两个表中找到搜索短语:
SELECT * FROM studies S, Elements E WHERE E.StudyId = S.StudyId And (S.Author LIKE '%$search%' OR S.Study_Name LIKE '%$search%' OR S.Abstract LIKE '%$search%')
And (E.Name_Element LIKE '%$search%' OR E.Name_Author LIKE '%$search%'
OR E.Source LIKE '%$search%' OR E.Manipulation LIKE '%$search%' OR E.Scale LIKE '%$search%')
显然,这假设你有一个字段可以加入它们,Element表中的一个字段指定了Studies表中哪个字段连接到主要调查员等。
选项2:
如果你的要求是结果应该返回在“两个”表中的任何一个中找到的结果(人们通常错误地使用'both'来表示这个),那么你应该使用2个不同SQL语句的UNION查询两个表,用于获取两者中常见的任何字段。