php表协会

时间:2012-11-14 17:59:39

标签: php mysql database-design

我在2个表之间存在关联问题: 我有

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

现在,一朵花可以有很多颜色,现在问题是父亲在单个数组中的所有信息。 es:如果我得到第一张表中的所有信息并获取它们我将会有

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

然后,如果我收集第二张表中的所有信息,我将会

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;
}

我在阅读了juergen的回复之后得到了这个,看起来它的工作原理问题是它为每个颜色提供了一个数组(总共4个数组),而不是只给我2个内部两种颜色的数组(总共2个阵列。)

EDIT2: 好吧,我没有找到一种方法来检索2个数组中的所有信息(而不是4个)但我设法以可读的方式打印它们:

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'];
    }

以这种方式,即使循环重复每个数组的所有信息,它只会输出信息,如果有新条目,它将不会重复任何内容。

1 个答案:

答案 0 :(得分: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