Получить данные из таблицы внешнего ключа 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 и т. Д.