Mysql跨表搜索

时间:2018-04-06 13:27:10

标签: php mysql

我正在尝试创建一个搜索字段,用户可以在其中搜索使用特定元素的研究。

我有两个表:elementsstudies

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>";
            }

}

但是,即使我输入了正确的参数,代码也会返回: 您的高级查询返回零结果。

我做错了什么?

1 个答案:

答案 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查询两个表,用于获取两者中常见的任何字段。