在另一个查询中执行查询

时间:2016-04-17 14:38:11

标签: javascript php mysql database html5

我正在尝试执行一个Sql查询,该查询依赖于每个循环的另一个sql查询的输出。

我有3本书,学生和借书。

书籍表包含所有书籍的完整详细信息(b_id是主键),学生具有所有学生的完整详细信息(s_id作为主键),借用的是一个表,其中s_id和b_id为外键,每个条目都是当学生借书时创建。

这种关系是一对一的,即学生可以借一本或多本书,但一本书不能与一本以上的学生一起借书。因此,我的b_id在表索引中是唯一的。

我的计划是创建一个Html表,列出所有借书的学生,并点击此表中的学生,下拉表显示该学生借用的所有书籍。

我似乎无法运行SQL查询,因为我需要第一个Sql查询中的s_id才能使下一个查询工作。加上我的下拉表也无法正常运作。

请帮助查看以下代码

Click on a student to see books borrowed:
<table class="table2">
    <thead>
    <tr>
        <th></th>
        <th>Name</th>
        <th>Mat number/th>
        <th>Dept</th>
        <th>level</th>
    </tr>
    </thead>
    <tbody>
    <?php
        $sql_query = "SELECT student.* FROM student, borrowed where student.s_id = borrowed.s_id Group by student.s_id;";

        $result =  $db->query($sql_query);

        if(mysqli_num_rows($result)>0){
            $counter = 0;

            while ($row = $result->fetch_array())
            {
                $counter++;
    ?>

    <tr>
        <td class="btn"><?php echo $counter;?></td>
        <td><?php echo $row['name'];?></td>
        <td><?php echo $row['matNo'];?></td>
        <td><?php echo $row['Dept'];?></td>
        <td><?php echo $row['level'];?></td>
    </tr>
    <tr>
        <th class="expand1"></th>
        <th class="expand1">Title</th>
        <th class="expand1">Author</th>
        <th class="expand1">Genre</th>
        <th class="expand1">ISBN</th>
    </tr>
   <tr><?php
               foreach($row as $studentid){

                   $sql = "SELECT books.* 
                           FROM books 
                             inner Join borrowed on books.b_id = borrowed.b_id  
                           WHERE borrowed.s_id = $studentid";

                   $result2= $dbs->query($sql);
                   while( $row2 = $result2->fetch_array()){
        ?>
        <td class="expand1"><?php echo $row2['title'];?></td>
        <td class="expand1"><?php echo $row2['author'];?></td>
        <td class="expand1"><?php echo $row2['genre'];?></td>
        <td class="expand1"><?php echo $row2['isbn'];?></td>
    </tr>
    <?php
                   }
               }
        }
    }
        $result->close();
        $dbs->close();
    ?>
</table>

这是我创建切换/可折叠表的脚本:

<script>
    $(document).ready(function(){
        $(".btn").click(function(){
            $(".expand1").toggle();
        });
        $(".btn2").click(function(){
            $(".expand2").toggle();
        });
    })

</script>

1 个答案:

答案 0 :(得分:1)

第二个查询不需要处于循环中,您可以在第二个查询的where子句中使用第一个查询s_id

           $sql = "SELECT books.* 
                   FROM books 
                      inner Join borrowed on books.b_id = borrowed.b_id  
                   WHERE borrowed.s_id = {$row['s_id']}";

               $result2= $dbs->query($sql);
               while( $row2 = $result2->fetch_array()){
    ?>

您还必须删除以下其中一个结束}