【问题标题】:I want to query connected records (left join) and put them into array-structure in PhP, how to?我想查询连接的记录(左连接)并将它们放入 PhP 中的数组结构中,如何?
【发布时间】:2012-05-03 13:24:37
【问题描述】:

几乎像这样:PHP/mySQL - how to fetch nested rows into multidimensinal array

SELECT products.NAME, products_prices.PRICE FROM products LEFT JOIN products_prices ON products.ID = products_prices.PROD_ID

这通常会导致:

NAME,   PRICE
window, 1000
window, 1200
mouse,  1400

因为window 有两个价格,而且可能根本没有价格。我希望它产生一个数组:

$arr = array(
             array('NAME' => 'window', 'price' => array(
                                                        array('PRICE' => 1000),
                                                        array('PRICE' => 1200)
                                                       ),
             array('NAME' => 'mouse', 'price' => array(
                                                       array('PRICE' => 1400)
                                                      )
            );

因此,连接的记录将是子数组。另一个问题可以有多个连接,但只有 LEFT JOIN-s。如何很好地做到这一点?链接的示例将连接的列放在主要部分,我不想这样做。

【问题讨论】:

  • LEFT JOINS,它们的倍数,都差不多。另一个选项是UNION,它变成了子查询,这有点超出我目前的能力。
  • 我尝试了什么? NOTHING :D 它非常复杂
  • 见下面我的回答。这并不复杂。但如果你从不尝试,就让别人为你做,下次可能看起来很复杂......

标签: php mysql join


【解决方案1】:

看起来像这样:

 $dataStore = array();
 foreach ($recordSet as $record){
     $dataStore[$record['NAME']]['prices'][] = $record['PRICE'];
 }

这只有在您确定一个产品名称可以有多个价格时才有效。

【讨论】:

    【解决方案2】:
    //array you get from mysql:
    $arrMysql = array(
                 array('NAME' => 'window', 'PRICE' => 1000),
                 array('NAME' => 'window', 'PRICE' => 1200),
                 array('NAME' => 'mouse', 'PRICE' => 1400)
                );
    
    $arr = array();
    foreach ($arrMysql as $row) {
        if (isset($arr[$row['NAME']])) {
            if (isset($arr[$row['NAME']]['price'])) {
                $arr[$row['NAME']]['price'].push(array('PRICE' => $row['PRICE']));
            } else {
                $arr[$row['NAME']]['price'] = array(array('PRICE' => $arr[$row['NAME']]['PRICE']), array('PRICE' => $row['PRICE']));
                unset($arr[$row['NAME']]['PRICE']);
            }
        }
        else {
            $arr[$row['NAME']] = $row;
        }
    }
    
    //you get:
    
    $arr = array(
                 'window' => array('NAME' => 'window', 'price' => array(
                                                            array('PRICE' => 1000),
                                                            array('PRICE' => 1200)
                                                           ),
                 'mouse' => array('NAME' => 'mouse', 'price' => array(
                                                           array('PRICE' => 1400)
                                                          )
                );
    
    // and if you want your array:
    $arr = array_values($arr);
    

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 2021-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      • 2012-08-08
      • 2021-09-25
      相关资源
      最近更新 更多