Получить данные из таблицы внешнего ключа mysql в php

У меня есть 3 таблицы в моей базе данных:

1.tblclient
2.tblbranch
3.tblclientbranch


|____tblclient_____|      |______tblbranch____|      |___tblclientbranch___|
| clientId {PK}    |      | branchId {PK}     |      |  clientId {FK}      |
| clientName       |      | branchName        |      |  branchId {FK}      |
| clientMob        |      | branchAddress     |      |                     |
| clientEmail      |      |                   |      |                     |

Я хочу знать, как получить данные из tblclientbranch основных таблиц (tblclient и tblbranch).

согласно базе данных, один клиент может иметь много филиалов. Я хочу получить эти оба clientName и branchName в двух выпадающих меню. Если я выберу имя клиента из выпадающего списка, выпадающий список BranchName сможет отображать только имя_высокого / определенного конкретного пользователя.

Любое решение было бы замечательно!
Заранее спасибо.

1 ответ

Решение

Вам необходимо использовать соединение SQL здесь. Внутреннее соединение потребует сопоставления, что в случае "имеет много" будет правильным. Попробуйте что-то вроде этого:

SELECT B.* FROM tblbranch B
INNER JOIN tblclientbranch CB on CB.branchId = B.branchId
INNER JOIN tblclient C ON CB.clientId = C.clientId
WHERE C.clientId = [YOUR CLIENT ID HERE]

Используя такой запрос, если вы передадите идентификатор клиента № 3, он будет искать соединения клиент -> филиал в этой таблице на основе этого идентификатора и вернет все ветви, к которым подключен этот клиент.

Чтобы ответить на ваш вопрос о выпадающих списках, вам нужно либо перебрать всех своих пользователей и вернуть массив для каждого из них, содержащий имена их ветвей, а затем использовать Javascript для заполнения второго выпадающего списка на основе выбора из первого или использовать Вызов AJAX привязан к событию изменения первого раскрывающегося списка и значению выбора, сделанного в первом раскрывающемся списке (в котором вы бы указали свой идентификатор клиента), чтобы получить результаты из вышеуказанного запроса и заполнить этим второе раскрывающееся меню.

Изменить: вот быстрый пример на PHP и jQuery о том, как вы могли бы сделать это:

get_branches.php (доступ по AJAX, возвращает JSON)

<?php
function getBranchesForClient($client_id) {
    // get the branches for a client

    $query = $pdo->prepare('SELECT B.* FROM tblbranch B INNER JOIN tblclientbranch CB on CB.branchId = B.branchId INNER JOIN tblclient C ON CB.clientId = C.clientId WHERE C.clientId = :client_id');
    $query->bindParam(':client_id', $client_id);
    $results = $query->execute();
    return $results->fetchAll(PDO::ASSOC);
}

echo json_encode(getBranchesForClient($_GET['client_id']));

Итак, вы получаете своих пользователей и выводите поле выбора следующим образом:

<select name="clients" id="clients">
    <?php
    foreach($clients as $client) {
        echo '<option value="' . $client['clientId'] . '">' . $client['clientName'] . '</option>';
    }
    ?>
</select>

У вас будет второе поле выбора для веток:

<select name="branches" id="branches"></select>

... тогда вы будете использовать jQuery (например), чтобы связать событие изменения этого выбора, чтобы заполнить другой выбор:

$('#clients').on('change', function() {
    var client_id = $(':selected', this).val();
    $.ajax({
        url: 'get_branches.php',
        data: { client_id: client_id },
        type: 'GET',
        dataType: 'JSON',
        success: function(msg) {
            // clear the select first
            $('#branch_select').empty();
            // add all new branches
            for(i in msg) {
                $('#branch_select').append('<option value="' + msg[i].branchId + '">' + msg[i].branchName + '</option>');
            }
        }
    });
});

Есть много других способов сделать это, конечно, это только пример. Убедитесь, что вы используете привязку параметров в mysqli или PDO, когда выполняете запрос MySQL, чтобы защитить себя от внедрения SQL и т. Д.

Другие вопросы по тегам