为什么SQL INNER JOIN返回所有记录而不管条件

时间:2018-06-14 12:24:15

标签: php mysql sql join foreach

我有两张表userstestusers表包含有关学生的信息,test表包含其测试详细信息。我想根据他的卷号在登录后向特定学生展示测试的所有细节。为实现此目的,我尝试在查询中使用以下foreach函数和INNER JOIN

<?php 
      foreach($conn->query('SELECT test.date, test.sub,test.topic,test.marks,test.rank FROM test JOIN users ON test.rollno=users.rollno order by date desc')as $row){ ?>
        <button class="accordion"><b>Test on <?php echo date('d-m-Y', strtotime( $row['date'] )); ?></b></button>
          <div class="panel">
           <p>
           <table border="1">
            <?php
            echo "<tr><td>Date: " . date('d-m-Y', strtotime( $row['date'] )) . "</td></tr>";
            echo "<tr><td>Subject: " . $row['sub'] . "</td></tr>";
            echo "<tr><td>Topic: " . $row['topic'] . "</td></tr>";
            echo "<tr><td>Marks: " . $row['marks'] . "</td></tr>";
            echo "<tr><td>Rank: " . $row['rank'] . "</td></tr>"; ?>
         </table>
            </p>
          </div>
      <?php }?>   

这将返回所有测试记录,而不管roll no。我在两个表中都有rollno列。我希望查询显示与当前卷号匹配的记录。请帮忙。

2 个答案:

答案 0 :(得分:0)

如果我理解你想要为一个用户选择但你没有过滤他:

SELECT test.date,
       test.sub,
       test.topic,
       test.marks,
       test.rank
FROM test
JOIN users USING(rollno)
WHERE rollno=yourusernumber
ORDER BY date DESC

答案 1 :(得分:0)

只需将查询更改为SELECT test.date, test.sub,test.topic,test.marks,test.rank FROM test JOIN users USING(rollno) WHERE rollno='.$userRow['rollno'].' order by date desc即可解决,其中$userRow['rollno']是一个包含roll no值的会话变量。当前登录的用户。