0

2 つのテーブル間の関連付けに問題があります。

table 1 "flowers": "id", "flower";
table 2 "colors": "id", "color";
table 3 "association_flowers_colors": "id", "id_flower", "id_color";

さて、1 つの花が多くの色を持つことができますが、問題はすべての情報が 1 つの配列内にあることです。es: 最初のテーブル内のすべての情報を取得してフェッチすると、

array([0](array[id]=>0, [flower]=>rose), [1]array([id]=>1, [flower]=>tulip));

次に、2 番目のテーブルからすべての情報を収集すると、

array([0]array([id]=>0, [color]=>red)[1]), [1]array([id]=>1, [color]=>white));

問題は次のとおりです。次の行に沿って配列を取得する必要があります

array([0]array([id]=>0, [flower]=>rose, [color]=>red, [color]=>white), [1]array([id]=>1, [flower]=>tulip, [color]=>red, [color]=>white));

単一の精巧なクエリでそれを行う簡単な方法はありますか、それともwhileループなどを使用して取得した情報をマージする必要がありますか?

ありがとう

編集:

function get_flowers(){
    include('../actions/db_connection.php');
        $result = mysqli_query($db_connection, "select * 
            from flowers f
            left outer join association_flowers_colors a on f.id = a.id_flower
            left outer join colors c on c.id = a.id_color");
        mysqli_close($db_connection);
         $flowers = array();
          while ($row = mysqli_fetch_array($result, MYSQL_ASSOC)) {
         $flowers[] =  $row;
        };

    return $flowers;
}

ユルゲンの返信を読んだ後、私はこれで終わりました。問題は、両方の色が内部にある2つの配列のみを提供するのではなく、各色の配列(合計4つの配列)を提供することです。 2 アレイ)。

edit2:わかりました、(4 ではなく) 2 つの配列ですべての情報を取得する方法が見つかりませんでしたが、とにかく読み取り可能な方法でそれらを印刷することができました:

while($row = mysqli_fetch_array($flowers)){


    if ($flowerID != $row['id_flower']) {
        echo "<div class='flowerContainer'>";
        echo "<input type='hidden' name='flowerID' value='".$row['id_flower']."'>";
        echo "Name: ".$row['flower']."<br />";
        }

    echo $row['color']."<br />";
    if ($flowerID == $row['id_flower']) {
        echo "</div>";
        echo "<hr>";
    }

    $flowerID = $row['id_flower'];
    }

このように、ループがすべての配列のすべての情報を繰り返しても、新しいエントリがある場合にのみ情報が出力され、何も繰り返されません。

4

1 に答える 1

2
select * 
from flowers f
left outer join association_flowers_colors a on f.id = a.id_flower
left outer join colors c on c.id = a.id_color
于 2012-11-14T18:02:46.773 に答える