0

データベースからデータをフェッチしようとしていますが、order_ids という列の共通値をその ID でグループ化したいと考えています。

これは、現在データを取得している状態です

Order_Id      |    Product Name

-------------------------------
  10001       |    iPhone 5
  10001       |    Blackberry 9900
  10002       |    Galaxy S
  10003       |    Rhyme
  10004       |    Google Nexus
  10005       |    Razr
  10006       |    iPad Air

そして、これは私がそれを取得したい状態です

Order_Id      |    Product Name

-------------------------------
  10001       |    iPhone 5
                   Blackberry 9900
  10002       |    Galaxy S
  10003       |    Rhyme
  10004       |    Google Nexus
  10005       |    Razr
  10006       |    iPad Air

コントローラーファイルで結果を取得する方法は次のとおりです

    foreach($results_query as $results_custom) {
        $this->data['result_custom'][] = array(
            'model' => $results_custom['product_name'],
            'order_number' => $results_custom['order_id']
        );
    }

ビューファイルに表示する方法は次のとおりです

 <?php foreach ($results_custom as $result) { ?>
 <li><?php echo $result['model']; ?></li> <br />
 <li><?php echo $result['order_number']; ?></li><br />
 <?php } ?>

SQL または PHP を使用して、データをそのように、またはその状態で表示することは可能ですか? 私のクエリも見たい場合はお知らせください。

4

3 に答える 3

0

GROUP_CONCAT結果を得るために使用することをお勧めします

次のように試してください

SELECT order_id,GROUP_CONCAT(product_name) as product_name FROM your_table GROUP BY order_id

これを見てくださいhttp://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

注 : GROUP_CONCAT にはサイズ制限があります。MySQL と GROUP_CONCAT() の最大長については、このリンクを確認してください。

于 2013-11-01T18:49:34.767 に答える
0

MySQL だけでこれを達成できるかもしれませんが、php ループを作成するだけの方が簡単かもしれません。ほとんどの人は foreach ループを好みますが、私は while ループが好きです。

$orderid = "number";
$order_query = mysql_query("SELECT * FROM ordertable WHERE Order_Id = '$orderid'");
while($order_data = mysql_fetch_array($order_query)){
    $ordername = stripslashes(mysql_real_escape_string($order_data['Product Name']));
    echo $ordername.'<br />';
}

すべての注文でこれが必要な場合は、特定の注文の検索を削除できます。

$order_query = mysql_query("SELECT * FROM ordertable ORDER BY Order_Id ASC");
while($order_data = mysql_fetch_array($order_query)){
    $orderid = mysql_real_escape_string($order_data['Order_Id']);
    $ordername = stripslashes(mysql_real_escape_string($order_data['Product Name']));
    echo 'ID#: '.$orderid.' - '.$ordername.'<br />';
}
于 2013-11-01T17:43:41.673 に答える
0

PHPでそれを行う方が簡単でしょう。私はそれをテストするためのPHP環境を持っていないので、それを行うためのロジックをいくつか示します. 必ずしも動作するコードではありません。それはあなたがしたことを提供しなかったからです

<?
  $sql = "select order_id, product name from ..... order by order_id"// rest of sql code ....
  //here you iterate your results
  $previousId = ""; //var to store previous id
  while( $fetch... ){
      if ( $fetchedID != $previousId ){
        echo $fetchedId . "-" . $fetchedProductName;
      }else{
        echo $fetchedProductName;
      }
      $previousId = $fetchedID;
  }
?>

これで十分です。コードを更新すると、これが解決策になります。

<?php 
   $lines = ""; //to make code cleaner;
   $previousModel = "";
   foreach ($results_custom as $result) {
     if ( $previousModel != $result['model'] ){ 
         $line .= "<li>" .  $result['model'] . "</li>";
     }else{
         $line .= "<li></li>";
     }   
     $line .= "<li>" . $result['model'] . "</li><br />";
     $previousModel = $result['model'];
   }
   echo $line;
 <?php } ?>
于 2013-11-01T17:44:22.790 に答える