将关系数据转换为数组

时间:2014-06-17 10:37:11

标签: php mysql

我有一张动物桌:

id | name
1    cat
2    dog

我有一个品种表:

id | breed    |          color
1    siamese             white     
2    tabby               mixed
3    golden retriever    yellow

我有一只动物来繁殖桌子:

id | animal_id | breed_id
1         1          1
2         1          2
3         2          3

我希望将每只动物及其所有品种/颜色都放入一个阵列中,然后我将其传递给JS。

所以数据看起来应该是这样的:

array('animal' => 'cat', 'details' => array(array('breed' => 'siamese', 'color' => 'white'), array('breed' => 'tabby', 'color' => 'mixed')) 'animal' => 'dog...etc);

我对查询不确定吗?我需要获取所有动物的数据。

1 个答案:

答案 0 :(得分:-1)

这应该可以解决问题:

$query = "SELECT a.name, b.breed, b.colour 
    FROM animals a
    LEFT JOIN animaltobreeds ab on a.id = ab.animal_id
    LEFT JOIN breeds b on b.id = ab.breed_id";
$results = $mysqli->query($query);
$data = array(); // We'll build our results into here.
if($results->num_rows) {
    while($row = $results->fetch_assoc()) {
        if( ! isset($data[$row['name']]) $data[$row['name']] = array();
        $data[$row['name']][] = array(
            'breed'     => $row['breed'],
            'colour'    => $row['colour']
        );
    }
}

然后,如果您想为Javascript输出它,可以使用json_encode($data)将其转换为JSON,然后将其导入Javascript。

您可能会注意到我对您所请求的结构略有不同,这个结构将如下所示:

array('cats' => array('breed => 'siamese', 'colour' => 'white'), array('breed' => 'tabby', 'color' => 'mixed'));

我认为它更容易使用,但如果您确实需要它,那么它应该很容易调整。