Работал над этим какое-то время; Необходимо выбрать данные из таблицы, в которой столбец идентификатора совпадает с идентификатором из другой таблицы.

Мой код на данный момент:

<?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();
?>

Я знаю, что упускаю здесь что-то важное. Любые предложения приветствуются.

1
user6779766 5 Сен 2016 в 10:21

6 ответов

Лучший ответ

Вы пропустили выборку элементов строки для извлечения идентификатора, который хотите использовать в качестве ОГРАНИЧЕНИЯ в следующем запросе.

$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 три таблицы

1
Community 23 Май 2017 в 12:17

Вам лучше объединить обе таблицы с помощью INNER JOIN, который отбрасывает строки из таблиц, если id не присутствует в другой таблице. Попробуйте что-нибудь вроде:

SELECT * FROM tbl1 INNER JOIN tbl2 ON tbl1.id = tbl2.id;
0
Thomas Baruchel 5 Сен 2016 в 07:26

Используйте это внутреннее соединение, чтобы получить строку из обеих таблиц, где идентификаторы совпадают

SELECT *
FROM input
INNER JOIN output
ON input.id=output.question_id;
0
FullStack 5 Сен 2016 в 07:24

Чтобы добиться этого, вы можете использовать запрос JOIN, который доступен в mysql.

Пример: рассмотрим две таблицы 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

Что, если нам потребуется список всех студентов и их курсов, даже если они не записаны на них? LEFT JOIN создает набор записей, который соответствует каждой записи в левой таблице (пользователь) независимо от любой совпадающей записи в правой таблице (курс):

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

ПРАВО ПРИСОЕДИНЯЙТЕСЬ

Возможно, нам потребуется список всех курсов и студентов, даже если никто не был зачислен? ПРАВИЛЬНОЕ СОЕДИНЕНИЕ создает набор записей, который соответствует каждой записи в правой таблице (курс) независимо от любой совпадающей записи в левой таблице (пользователь):

SELECT user.name, course.name FROM `user` RIGHT JOIN `course` on user.course = course.id;
1
Naresh Kumar P 5 Сен 2016 в 07:50

Вы можете добиться этого с помощью ключевого слова SQL INNER JOIN.

SQL

SELECT * FROM input INNER JOIN output on input.id = output.question_id
0
Sofiene Djebali 5 Сен 2016 в 07:24

Не уверен, что это то, что вы хотите, поэтому дайте мне знать в комментариях, прежде чем голосовать против, попробуйте следующее:

SELECT * FROM output, input WHERE output.question_id = input.id
0
Marco Santarossa 5 Сен 2016 в 07:24