Php 搜索表单选择结果

Php 搜索表单选择结果,php,mysql,sql,search-form,Php,Mysql,Sql,Search Form,我有两个表,一个称为users,带有user\u id、user\u name、school\u id和subcat\u id,另一个称为school\u id、school\u name和school\u decile。我用select语句制作了一个搜索表单,它根据用户在搜索表单上选择的子类别id和/或学校id从第一个表中收集结果。现在,我想用用户名、学校名称和学校小数来显示结果。但正如在select语句中一样,我只从第一个表中进行选择,而不是从第二个表中进行选择。如果select语句中没有学

我有两个表,一个称为users,带有user\u id、user\u name、school\u id和subcat\u id,另一个称为school\u id、school\u name和school\u decile。我用select语句制作了一个搜索表单,它根据用户在搜索表单上选择的子类别id和/或学校id从第一个表中收集结果。现在,我想用用户名、学校名称和学校小数来显示结果。但正如在select语句中一样,我只从第一个表中进行选择,而不是从第二个表中进行选择。如果select语句中没有学校名称和学校名称,如何显示用户的结果

if ($subcat_number !== '0') {
    if ($school_number === '0') { //if a school isn't selected
        $sql = "SELECT * FROM users WHERE subcat_id=$subcat_number";
    } else { //if a school is selected
        $sql = "SELECT * FROM users WHERE subcat_id=$subcat_number AND school_id=$school_number ";
    }
}

$result = mysqli_query($con, $sql);
$found = mysqli_num_rows($result);

//results table
echo "<table>
<tr>
<th id='namecol'>Search Results:</th>
<th id='schoolcol'></th>
</tr><tr>";

if ($found > 0) {
    while ($row = mysqli_fetch_array($result)) {
        echo "<td id='namecol'>Name: " . $row['name'] . " </td><td>School: " . $row['school_name'] . " <br>Decile of School: " . $row['school_decile'] . "</td>";
//obviously, the $row['school_name'] and $row['school_decile'] doesn't work as they weren't selected in the select statements        
    }
} else {
    echo "<td>No Expert Found</td></tr>";
}
echo "</table>";

正如@Rasclatt所建议的,您需要使用JOIN


你应该这样做:

<?php
    if($subcat_number !== '0') {
            $sql = "SELECT users.name, users.school_name, users.school_decile FROM users INNER JOIN schools on users.school_id = schools.school_id  WHERE users.subcat_id = $subcat_number";

            if($school_number === '0')
                $sql .= " AND schools.school_id = '$school_number'";

            $result =   mysqli_query($con, $sql);
            $found  =   mysqli_num_rows($result); ?>
    <table>
        <tr>
            <th id='namecol'>Search Results:</th>
            <th id='schoolcol'></th>
        </tr><?php

            if($found > 0) {
                    while ($row = mysqli_fetch_array($result)) { ?>
        <tr>
            <td id='namecol'>Name: <?php echo $row['name']; ?></td>
            <td>School: <?php echo $row['school_name']; ?><br>Decile of School: <?php echo $row['school_decile']; ?></td>
        </tr>
                <?php   }
                }
            else { ?>
        <tr>
            <td>No Expert Found</td>
        </tr><?php 
                } ?>
    </table><?php
        } ?>

您可能应该按照描述进行连接。您应该确保将$sql上的所有条件都放在if语句中,因为$result=mysqli_query$con,$sql;需要$sql。如果If$subcat_number=='0',则剩下一个没有语句的查询。我已重新编码,因此所有内容都在If语句中,但仍然没有显示结果:我认为sql是错误的。您必须将表名前置到要提取的列。现在我并不是说我的是对的,我在连接表方面做得不多,但我知道你需要在列前面加上像users这样的表名。user_idi发现我的select语句哪里出错了,有一个语法错误。感谢您的帮助,然后它给出了这个警告,结果是错误的:mysqli_num_rows期望参数1是mysqli_result,在第74行的/var/www/projectv5/search.php中给出了布尔值
if ($subcat_number !== '0') {
    if ($school_number === '0') { //if a school isn't selected
        $sql = "SELECT name, school_name, school_decile  FROM users INNER JOIN schools on users.school_id = schools.school_id  WHERE subcat_id=$subcat_number";
    } else { //if a school is selected
        $sql = "SELECT name, school_name, school_decile FROM users INNER JOIN schools on users.school_id = schools.school_id WHERE subcat_id=$subcat_number AND school_id=$school_number ";
    }
}

$result = mysqli_query($con, $sql);
$found = mysqli_num_rows($result);

//results table
echo "<table>
<tr>
<th id='namecol'>Search Results:</th>
<th id='schoolcol'></th>
</tr><tr>";

if ($found > 0) {
    while ($row = mysqli_fetch_array($result)) {
        echo "<td id='namecol'>Name: " . $row['name'] . " </td><td>School: " . $row['school_name'] . " <br>Decile of School: " . $row['school_decile'] . "</td>";

    }
} else {
    echo "<td>No Expert Found</td></tr>";
}
echo "</table>";
<?php
    if($subcat_number !== '0') {
            $sql = "SELECT users.name, users.school_name, users.school_decile FROM users INNER JOIN schools on users.school_id = schools.school_id  WHERE users.subcat_id = $subcat_number";

            if($school_number === '0')
                $sql .= " AND schools.school_id = '$school_number'";

            $result =   mysqli_query($con, $sql);
            $found  =   mysqli_num_rows($result); ?>
    <table>
        <tr>
            <th id='namecol'>Search Results:</th>
            <th id='schoolcol'></th>
        </tr><?php

            if($found > 0) {
                    while ($row = mysqli_fetch_array($result)) { ?>
        <tr>
            <td id='namecol'>Name: <?php echo $row['name']; ?></td>
            <td>School: <?php echo $row['school_name']; ?><br>Decile of School: <?php echo $row['school_decile']; ?></td>
        </tr>
                <?php   }
                }
            else { ?>
        <tr>
            <td>No Expert Found</td>
        </tr><?php 
                } ?>
    </table><?php
        } ?>