Zend在嵌套数组中合并2个SQL语句

时间:2013-03-01 08:23:47

标签: sql zend-framework loops jointable

我一直试图解决这个问题几天了。我需要将一个值数组放入一个主数组中,而这一切都必须来自SQL语句

public function fetchAllRest()
{

    $db = $this->getAdapter();
    $sql = $db->select()->from(array('c' => $this->getTableName()), array('id', 'personalId', 'name', 'number', 'email'))
    ->join(array('pd' => $this->getTableName('personal_data')), 'pd.personalId = c.personalId', array('street', 'zipcode', 'place'));

    $results = $this->getAdapter()->fetchAll($sql);
    return $results;
}

下面的代码生成一个包含个人数据连接的所有记录的数组(因此,如果我有5条记录,我将获得5条记录的数组)。

现在我想让join语句(personal_data部分)成为另一个数组的数组的一部分,所以现在我们有:

[ 
    {1}, 
    {2}, 
    {3}, 
    {4}, 
    {5}
]

每个值包含一个(5 + 3)值的数组(在这种情况下,JSON带有键/值对),这应该成为:

[ 
    {1 
        {"personal_data" : "name", "number", "email"}
    }, 
    {2 
        {"personal_data" : "name", "number", "email"}
    }, 
    {3 
        {"personal_data" : "name", "number", "email"}
    }, 
    {4 
        {"personal_data" : "name", "number", "email"}
    }, 
    {5 
        {"personal_data" : "name", "number", "email"}
    }
]

原始数组中的自定义命名值,其值为'personal_data',包含该记录的所有personal_data。

我尝试循环遍历每个SQL,但它产生了太多语句导致一些mysql-bytes-error

任何解决方案?

提前致谢

编辑:我尝试了以下内容:

foreach($results as $r) {
        $results[$i]["personal_data"] = array('personalDataId' => $results[$i]['personalDataId'],
                'name' => $results[$i]['name'],
                'number' => $results[$i]['number'],
                'email' => $results[$i]['email'];
        $i++;
    }
    return $results;

太糟糕了,这并没有按照我想要的方式解决,导致为了访问数组中的值,他们必须在那里(导致数据已经在哈希中的子数组)。我现在正在考虑删除这些多余的数据,但删除最初添加的数据听起来非常不方便

1 个答案:

答案 0 :(得分:1)

获得$results后尝试此操作:

$jsonArray = array();
foreach ( $results as $result ) {
    $jsonArray[] = array( 'personal_data' => array(
        'id' => $result->id,
        'name' => $result->name,
        'street' => $result->street,
        ...
    ));
}

return $jsonArray;