从php中的mysql外键表中获取数据

时间:2014-07-31 05:45:24

标签: php mysql foreign-key-relationship

我的数据库中有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'。

任何解决方案都会很棒! 谢谢高级。

1 个答案:

答案 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中使用参数绑定。