【问题标题】:Why SQL INNER JOIN returns all records regardless of condition为什么 SQL INNER JOIN 不考虑条件返回所有记录
【发布时间】:2018-06-14 12:24:15
【问题描述】:

我有两张桌子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 }?>   

无论卷号如何,这都会返回所有测试记录。我在两个表中都有rollno 列。我希望查询显示与当前卷号匹配的记录。请帮忙。

【问题讨论】:

  • WHERE user.rollno = ??
  • 首先,打印您的查询并在数据库中运行
  • @KrunalPandya 它使用此查询SELECT test.date, test.sub,test.topic,test.marks,test.rank FROM test JOIN users USING(rollno) WHERE rollno=12 order by date desc 工作,但它是session 如果我输入rollno=$userRow['rollno'] 那么它说语法错误
  • 你可以在页面上打印卷号,然后一旦你开始工作,你就可以在 where 子句中使用该变量
  • @variable 我试过了。 rollno 打印在页面上,但错误是 Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column '$temp' in 'where clause'' in C:\wamp64\www\rathi-classes\home.php on line 367

标签: php mysql sql join foreach


【解决方案1】:

如果我知道您想为一位用户选择,但您没有过滤他:

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

【讨论】:

  • 它使用这个查询SELECT test.date, test.sub,test.topic,test.marks,test.rank FROM test JOIN users USING(rollno) WHERE rollno=12 order by date desc 工作,但它是session 如果我输入rollno=$userRow['rollno'] 那么它说语法错误
  • 这是错误Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '["rollno"] order by date desc' at line 2' in C:\wamp64\www\rathi-classes\home.php on line 366
  • 再次出现在PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '["rollno"] order by date desc' at line 2 in C:\wamp64\www\rathi-classes\home.php on line 366下方
【解决方案2】:

只需将查询更改为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'] 是一个会话变量,其中包含卷号的值。当前登录的用户。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 2018-10-11
    • 2011-01-27
    • 1970-01-01
    相关资源
    最近更新 更多