2

製品とカテゴリ間の多対多の関係のジャンクション テーブルを扱っています。この特定の関数を使用して、product_ID 変数を取り込んで、関連するすべてのカテゴリ名を配列で取得しようとしています。ただし、現在のセットアップでは、製品 ID ごとに 1 つのカテゴリしか取得できませんが、複数のカテゴリに 2 があることがわかっています。何か考えはありますか? また、mysql で M2M 関係をより視覚的に追跡するための簡単な解決策を知っている人はいますか?

    //製品 ID を入力し、関連するカテゴリを取得します
    関数 productcat($pid) {
        グローバル $sql;
        $query = "SELECT * FROM Product_Category WHERE Product_ID = '$pid'";
        $result = mysqli_query($sql, $query);
        $catidarray = 配列();
        while($row = mysqli_fetch_array($result)) {
                array_push($catidarray, $row['Category_ID']);
        }

        foreach($catidarray as $i) {
            $query = "SELECT * FROM カテゴリ WHERE カテゴリ ID = '$i'";
            $result = mysqli_query($sql, $query);
            $namearray = 配列();
            while($row = mysqli_fetch_array($result)) {
                array_push($namearray, $row['Name']);
            }

        }

        $namearray を返します。
    }

4

1 に答える 1

2

あなたの機能に何か問題があります。

2 番目の foreach では、変数$namearrayをループ内に配置し、実行ごとにその値を空の配列$namearray = array();にリセットします。. それをforeachの外に置くだけです:

//--> put it here
$namearray = array();
foreach($catidarray as $i) {
    $query = "SELECT * FROM Categories WHERE Category_ID = '$i'";
    $result = mysqli_query($sql, $query);

    while($row = mysqli_fetch_array($result)) {
        array_push($namearray, $row['Name']);
    }
}

そして、私はあなたの機能についていくつかの提案をしたいだけです. があるので、これらのテーブルから目的の値を取得するために、とjunction tableに対して個別のクエリを作成する必要はありません。productcategory

テーブルのリレーションを最大限に活用するには、 INNER JOINを実行するだけです。

ジャンクションテーブルを使用するProduct_Categoryのは、それを作成した本当の目的だからです。

SELECT *
FROM Product_Category AS a
INNER JOIN Category AS b
ON a.Category_ID = b.Category_ID
WHERE Product_ID = $pid

あなたの関数では、これを試すことができます:テストされていませんが、これがあなたにアイデアを与えることを願っています.

//INPUT PRODUCT ID, GET ASSOCIATED CATEGORIES
function productcat($pid) {
    global $sql;
    $query = "SELECT *
              FROM Product_Category as a
              INNER JOIN Category as b
              ON a.Category_ID = b.Category_ID
              WHERE Product_ID = {$pid}";
    $result = mysqli_query($sql, $query);
    $namearray = array();
    while($row = mysqli_fetch_array($result)) {
            array_push($catidarray, $row['Name']);
    }
    return $namearray;
}

それで終わりです:)

ところで、php の最新バージョンでは、mysql_関数は既に廃止されています。PDOまたはMySQLiを使用する場合は、はるかに優れています。これも確認してください: PDO vs. MySQLi

于 2014-02-15T06:03:49.613 に答える