Создать вложенный цикл SQL - PullRequest
0 голосов
/ 17 апреля 2020

Как сделать вложенный SQL l oop, используя PHP?

Я пытаюсь вывести все bundle_id из таблицы packages, где находится строка user (первичный ключ) - $username. Внутри этого l oop я хочу запустить еще один l oop для вывода blacklist из таблицы access, где bundle_id (не первичный ключ) - это выход из первого l oop.

Вот мой код:

$sql = "SELECT bundle_id FROM packages WHERE user='" . $username . "'";
$result = mysqli_query($conn, $sql);
while($row = mysqli_fetch_assoc($result)){
    echo $row['bundle_id'];
    $sql = "SELECT blacklist FROM access WHERE bundle_id='" . $row['bundle_id'] . "'";
    $result = mysqli_query($conn, $sql);
    while($row = mysqli_fetch_assoc($result)){
        echo $row['blacklist'];
    }
}

Проблема с моим кодом состоит в том, что он выводит только первую строку из таблицы access.

1 Ответ

3 голосов
/ 17 апреля 2020

Вы повторно используете одну и ту же локальную переменную $row и $result в обоих циклах, поэтому вы не получаете правильные результаты. Но гораздо лучше, используйте JOIN:

SELECT a.blacklist
FROM access a
JOIN packages p ON a.bundle_id = p.bundle_id
WHERE p.user = ?

Обратите внимание, я использую переменную связывания для предотвращения SQL инъекций / синтаксических ошибок и т. Д. c.

...