【问题标题】:SELECT * FROM table_1 WHERE id = id in table_2SELECT * FROM table_1 WHERE id = id in table_2
【发布时间】:2016-09-05 07:21:13
【问题描述】:

已经为此工作了一段时间;需要从 ID 列与另一个表中的 ID 匹配的表中选择数据。

到目前为止我的代码:

<?php
$sql = "SELECT * FROM input";
$sql2 = "SELECT * FROM output WHERE question_id =".$row["id"];
$result = $conn->query($sql);
$result2 = $conn->query($sql2);

if ($result->num_rows > 0) {
  $index = 0;
  while($row = $result->fetch_assoc()) {
    $index++;
    ?>

    <?php
    echo '<input type="hidden" name="questionid" value="'. $row['id'].'"/>';
    ?>

    <?php

    if ($result2->num_rows > 0) {
      while($row2 = $result2->fetch_assoc()) {
      }
    } else {
      echo "0 results";
    }
  }
} else {
  echo "0 results";
}
$conn->close();
?>

我知道我在这里遗漏了一些重要的东西。任何建议表示赞赏。

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    您错过了获取行项目以提取要在下一个查询中用作 CONSTRAINT 的 ID

    $sql = "SELECT * FROM input";
    
    $row = mysqli_fetch_array($sql);
    
        $sql2 = "SELECT * FROM output WHERE question_id =".$row["id"];
        $result = $conn->query($sql);
        $result2 = $conn->query($sql2);
    

    也可以这样考虑两个表的JOIN SELECT;

    $sql = SELECT input.* , output.* FROM input JOIN output (id) WHERE input.id = "".
    

    查看MySql Join three tables

    【讨论】:

    • 您如何期望它在需要时以不可用的约束运行第二个查询?
    • @Asuquol12 嘿,我想知道如何将ORDER BY date DESC 行添加到第二个表中。我尝试添加它,但 $row['id'] 在这里出现了一些问题...你能帮我解决这个问题吗..
    • 你要注意引号。你可以使用这个 $sql2 = "SELECT * FROM output WHERE question_id = ' $row["id"] ' ORDER BY date DESC " ;
    • 试过了..它说像Parse error: syntax error, unexpected '"', expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)这样的错误
    • 使这个变量像 $myid = $row["id"] ;然后在查询中将 $row["id"] 替换为 $myid。
    【解决方案2】:

    为了实现这一点,你可以使用 mysql 中提供的 JOIN 查询。

    例如:考虑两个表 user 和 course

    用户表:

    id  name         course
    1   Alice        1
    2   Bob          1
    3   Caroline     2
    4   David        5
    5   Emma        (NULL)
    

    课程表:

    id  name         
    1   HTML5
    2   CSS3
    3   JS
    4   PHP
    5   WORDPRESS
    

    INNER JOIN(或只是 JOIN)

    最常用的子句是INNER JOIN。这会生成一组在用户表和课程表中都匹配的记录,即所有注册课程的用户:

    SELECT user.name, course.name FROM `user` INNER JOIN `course` on user.course = course.id;
    

    左连接

    如果我们需要一份所有学生及其课程的列表,即使他们没有注册,该怎么办? LEFT JOIN 生成一组记录,这些记录匹配左表(用户)中的每个条目,而不管右表(课程)中的任何匹配条目:

    SELECT user.name, course.name FROM `user` LEFT JOIN `course` on user.course = course.id;
    

    右连接

    也许我们需要一份所有课程和学生的列表,即使没有人注册? RIGHT JOIN 生成一组记录,匹配​​右表(课程)中的每个条目,而不管左表(用户)中的任何匹配条目:

    SELECT user.name, course.name FROM `user` RIGHT JOIN `course` on user.course = course.id;
    

    【讨论】:

      【解决方案3】:

      不确定这是否是你想要的,所以在投票之前让我在 cmets 中知道,试试这个:

      SELECT * FROM output, input WHERE output.question_id = input.id
      

      【讨论】:

        【解决方案4】:

        您可以使用SQL INNER JOIN Keyword 实现此目的

        SQL

        SELECT * FROM input INNER JOIN output on input.id = output.question_id
        

        【讨论】:

        • 试过内部连接它说一些错误,比如Parse error: syntax error, unexpected '$result' (T_VARIABLE) in C:\xampp\htdocs\the_database\answer.php on line 816
        【解决方案5】:

        使用此内部连接从两个表中获取 id 匹配的行

        SELECT *
        FROM input
        INNER JOIN output
        ON input.id=output.question_id;
        

        【讨论】:

          【解决方案6】:

          您应该使用INNER JOIN 连接两个表,如果另一个表中不存在id,它将丢弃表中的行。尝试类似:

          SELECT * FROM tbl1 INNER JOIN tbl2 ON tbl1.id = tbl2.id;
          

          【讨论】:

          • 试过内部连接它说像Parse error: syntax error, unexpected '$result' (T_VARIABLE) in C:\xampp\htdocs\the_database\answer.php on line 816这样的错误
          猜你喜欢
          • 2017-09-27
          • 1970-01-01
          • 1970-01-01
          • 2011-04-06
          • 2012-01-13
          • 1970-01-01
          • 2011-01-27
          • 1970-01-01
          • 2014-01-27
          相关资源
          最近更新 更多