2012-03-15 18 views
0

whileループを使用してストアドプロシージャから呼び出す配列から重複したエントリを削除したいと考えています。whileループからフェッチされた重複を削除します。

// Prepare stored procedure call 
    $sth = $dbh->prepare('CALL sp_get_recipes()'); 

    // Call the stored procedure 
    $res = $sth->execute(); 

    if ($res){     
     while($row = $sth->fetchObject()){ 
      echo $row->Recipe; // I would like to echo this row just once. 
      echo '<ul class="recipe-body"><li>'.$row->Ingredient."&nbsp;".$row->Quantity."&nbsp;".$row->UoM.'</li></ul>'; 
      } 
     // Close connection 
      $dbh = null; 
     }else{ 
     $arr = $sth->errorInfo(); 
     echo "Execution failed with MYSQL: " . $arr[0] . "\n"; 
     die(); 
     } 

私の理解は私のecho $ row-> Recipeです。何とか自分自身に存在しなければならない。私は値を一度エコーするためにarray_uniqueを調べていますが、正確に把握できないようです。誰かが正しい方向に私を指すことができれば、それはすばらしいことになります。

更新 すべての回答ありがとうございます。私は一意の行を返すストアドプロシージャを修正しました。

+1

プロシージャから一意の行を返すのはどうですか? –

答えて

0

whileの前に一時配列を作成し、エコーされたすべてのレシピを保存します。エコーの前に、現在のレシピのテンポラリアレイをチェックしてください(エコーを返さない場合はエコー&を一時的な配列に格納してください)。

0

データベース構造を変更できない場合は、データベースクエリから取得した情報をオブジェクト(たとえば、Ingredientオブジェクトの配列を持つ何らかの種類のレシピオブジェクト)に保存してから、実際の出力。

データベース構造やクエリの方法を変更することができれば(後者がすでに私にお勧めしている場合)、(データベースがリレーショナルであると仮定して)ある種のレシピIDおよびレシピの成分の別のテーブルを含み、各成分の行には、それが属するレシピのIDも格納される。

関連する問題