簡體   English   中英

從php中的mysql外鍵表中獲取數據

[英]Fetch data from mysql Foreign key table in php

我的數據庫中有3個表:

1.tblclient
2.tblbranch
3.tblclientbranch


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

我想知道如何從主表(tblclient和tblbranch)的tblclientbranch獲取數據。

根據數據庫,一個客戶端可以有多個分支。 我想將這兩個clientName和branchName都提取到兩個下拉菜單中。 如果我從下拉列表中選擇客戶端名稱,則branchName下拉列表僅能顯示該特定用戶的branchName / s。

任何解決方案都很棒!
提前致謝。

您需要在此處使用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]

使用這樣的查詢,如果傳入客戶端ID#3,它將基於該ID在該表中查找客戶端->分支連接,並返回該客戶端連接到的所有分支。

要回答有關下拉菜單的問題,您需要遍歷所有用戶並為每個用戶返回一個包含其分支名稱的數組,然后使用Javascript根據第一個下拉菜單中的選擇填充第二個下拉菜單,或者使用AJAX調用綁定到第一個下拉列表的change事件以及在第一個下拉列表中所做的選擇的 (您將使用該作為客戶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查詢時在mysqli或PDO中使用參數綁定,以防止受到SQL注入等的影響。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM