1

次のクエリがあります。

  $query = db_select('commerce_order', 'cord')->extend('TableSort');
  $query->join('commerce_line_item', 'li', 'cord.order_id = li.order_id');
  $query->join('commerce_product', 'item', 'item.sku = li.line_item_label');
  $query->fields('cord', array('order_id'))
        ->fields('li', array('quantity'))
        ->fields('item', array('title', 'sku'))
        ->groupBy('title')

        ->orderByHeader($header); 
  $query->addExpression('SUM(quantity)', 'quantity');      
  $result = $query->execute();

ご覧のとおり、結果は「タイトル」でグループ化されています。行の 1 つが次のようになります。

商品1 - 0000003 - 3.00 - 612

3.00 は数量で、612 は注文 ID の1 つです。注文 612 には数量 2 が含まれており、注文 615 には数量 1 が含まれています。注文 ID 612 の隣に注文 ID 615 を表示するにはどうすればよいですか? したがって、行は次のようになります。

商品1 - 0000003 - 3.00 - 612, 615

ご理解いただけると幸いです。ご協力いただきありがとうございます。

解決

$query->addExpression("GROUP_CONCAT(li.order_id separator ', ')", 'order_id'); 
4

1 に答える 1

1

MySQLでは、式を追加できますGROUP_CONCAT(order_id)。これは、グループごとのすべての値のコンマ区切りのリストになります。詳細については、 GROUP_CONCAT()のマニュアルを参照してください。

MySQLを使用していない場合は、別のソリューションを使用する必要があります。GROUP_CONCATはMySQLに固有の関数ですが、他のRDBMSブランドの中には、同じことを行うための同等の方法があるものもあります。

于 2012-10-29T15:33:05.367 に答える