Как запросить строки из 2 таблиц в одном запросе? - PullRequest
0 голосов
/ 09 марта 2020
TABLE 1
student_id | name
-----------------
1          | A
2          | B
3          | C
4          | D

TABLE 2
vote_id   | student_id | vote_for
------------------------------
1          | 1          | 2
2          | 1          | 3
3          | 2          | 1
4          | 1          | 4

Как я могу получить записи из TABLE 1 (имена учащихся B C D) на основе student_id в TABLE 2 (student_id 1) в одном запросе? Мне удалось это сделать, но в нескольких запросах, как показано ниже:

$students = array();
$query = "SELECT vote_for FROM table2 WHERE student_id=?";          
$stmt = $this->con->prepare($query);
$stmt->bind_param("i",$student_id);
$stmt->execute();
$stmt->bind_result($vote_for);
$votes = array();
while($stmt->fetch()){
    $votes[] = $vote_for;
}
$stmt->close();
if (!empty($votes)) {
    $query = "SELECT name FROM table1 WHERE student_id=?";
    foreach ($votes as $vote) {
        $stmt = $this->con->prepare($query);
        $stmt->bind_param("i",$vote);
        $stmt->execute();
        $stmt->bind_result($name);
        while($stmt->fetch()){
            $temp = array(); 
            $temp['name'] = $name; 
            $students[] = $temp;
        }
        $stmt->close();
    }
}

Ответы [ 2 ]

1 голос
/ 09 марта 2020

Вы можете использовать запрос JOIN, чтобы получить имена учеников, за которых проголосовал данный student_id. Например:

SELECT s.name AS voted_for
FROM table2 v
JOIN table1 s ON s.student_id = v.vote_for
WHERE v.student_id = 1

Демонстрация на dbfiddle

In PHP:

$students = array();
$query = "SELECT s.name AS voted_for
    FROM table2 v
    JOIN table1 s ON s.student_id = v.vote_for
    WHERE v.student_id = ?";          
$stmt = $this->con->prepare($query);
$stmt->bind_param("i",$student_id);
$stmt->execute();
$stmt->bind_result($name);
while($stmt->fetch()) {
    $students[] = array('name' => $name);
}
$stmt->close();
0 голосов
/ 09 марта 2020

Я полагаю, что вы можете достичь этого с помощью следующего запроса:

SELECT T1.STUDENT_ID, T1.NAME 
FROM TABLE_1 T1, TABLE_2 T2
WHERE T1.STUDENT_ID = T2.VOTE_FOR
AND T2.STUDENT_ID = ?

И вы просто добавите STUDENT_ID для таблицы 2. Вы можете удалить T1.STUDENT_ID, если необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...