我的数据库中有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下拉列表只能显示该特定用户的branchName / s'。
任何解决方案都会很棒! 谢谢高级。
答案 0 :(得分:2)
您需要在此处使用SQL连接。 inner join需要进行匹配,在"的情况下有很多"会是对的。尝试这样的事情:
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]
使用这样的查询,如果您传入客户端ID#3,它将查找客户端 - >基于该ID在该表中进行分支连接,并返回该客户端连接的所有分支。
要回答关于下拉列表的问题,您需要遍历所有用户并为每个用户返回包含其分支名称的数组,然后使用Javascript根据选择来填充第二个下拉列表。首先,或使用绑定到第一个下拉列表的更改事件的AJAX调用和第一个下拉列表中选择的值(您将使用您的客户端ID)来检索结果从上面的查询中填充第二个下拉列表。
编辑:这是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(例如)来绑定此select的change事件以填充另一个select:
$('#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>');
}
}
});
});
当然还有很多其他方法可以做到这一点,这只是一个例子。当您进行MySQL查询以确保SQL注入安全时,请确保在mysqli或PDO中使用参数绑定。