选择SQL查询

时间:2015-07-03 11:58:16

标签: php mysql combobox

我在课程注册时遇到问题。

我有3 tables名为dept(dept_id,dept_name),其中dept_id是主键第二个表是semester (semester_id, semester_name,dept_id) semester_id是主键,dept_id是外国的key .3rd table是courses(c_id,dept_id,sem_id,c_name),其中c_id是主键,dept_idsem_id是外键。

我有3个组合框:  关于部门的第1次

(select* from dept)
<option value="<?php echo $sql_res1["dept_id"]; ?>" <?php if($sql_res1["dept_id"]==$_REQUEST["dept_id"]) { echo "Selected"; } ?>><?php echo $sql_res1["dept_name"]; ?></option>
<?php
}
?>

第二个组合框是学期:

select * from semester where dept_id='$_REQUEST[dept_id]'";

第3个组合框是课程。  我不知道如何查询它。我希望如果部门等于计算机科学,学期等于1,则第3个组合框将显示相同的课程,如果部门是法律,学期等于2,那么第3个组合框显示他们的相关课程。

1 个答案:

答案 0 :(得分:0)

基本上有两种方法可以解决这个问题。

方法1:异步(AJAX)

每次用户更改选项并替换所有选项实体时,都会向服务器查询相关数据。例如(jQuery):

$("#select-entity-1, #select-entity-2").change(function () {
    var deptId = $("#select-entity-1").val();
    var semId  = $("#select-entity-2").val();
    $.post("path/to/your/script.php", {
            deptId: deptId,
            semId:  semId
        }, function (response) {
            $("#select-entity-3").html(response);
        }
    );
});

在PHP中它看起来像这样:

<?php
if (isset($_POST['deptId']) && isset($_POST['semId'])) {
    $deptId = (int) $_POST['deptId'];
    $semId  = (int) $_POST['semId'];
    $res    = $db->query("SELECT * FROM `courses` WHERE `dept_id` = $deptId AND `sem_id` = $semId");
    if ($res->num_rows) {
        while ($row = $res->fetch_assoc()) {
            echo '<option value="'.$row['c_id'].'">';
            echo $row['c_name'];
            echo '</option>';
        }
    }
}

方法2:通过JavaScript数组存储和访问数据

将第三个表的数据存储在JavaScript数组中。它与异步方法类似,但不是查询服务器,而是从存储的数组中选择相关数据。

哪种方法更有效,高度取决于第三个表的大小。使用大量数据时,异步方法很可能是更好的选择。否则,我倾向于第二个,因为它没有延迟,你通常想避免不必要的流量。

由于您没有提供任何代码,因此我可以为您提供所有代码。我希望它会引导你走向正确的方向。