2016-10-02 24 views
3

私は2つのテーブルを持っています。 t1およびt2ForeachでForeach?不正なデータを表示

t1データ以下のように:

+--------+---------------+--------------+ 
| mid | name   | desc   | 
+---------------------------------------+ 
| 1  | Fris   | Helo   | 
| 2  | Kenn   | Wow!   | 
| 3  | Henny   | CCC   | 
+---------------------------------------+ 

t2データ以下のように:次のように

$xzdtall = DB::fetch_all("SELECT * FROM t1 ORDER BY mid ASC"); 
foreach($xzdtall as $xzdt){ 
    $testing = DB::fetch_all("SELECT * FROM t2 WHERE mid = $xzdt['mid'] ORDER BY tid ASC"); 
    foreach($testing as $test){ 
     $testlist[] = $test; 
    } 
    $xzdtlist[] = $xzdt; 
} 

そして今、私のループ:

+--------+---------+----------------+ 
| tid | mid  | tcode   | 
+-----------------------------------+ 
| 1  | 1  | 1    | 
| 2  | 1  | GG    | 
| 3  | 1  | TTTTTT!  | 
+-----------------------------------+ 

今私のPHPのコーディングは、このようなものです:

#my looping 
<!--{loop $xzdtlist $xzdt}--> 
<div>$xzdt[name] <!--{loop $testlist $test}--><b>$test[tcode]</b><!--{/loop}--></div> 
<!--{/loop}--> 

私の最終的な出力:

<div>Fris <b>1</b><b>GG</b><b>TTTTTT!</b></div> 
<div>Kenn <b>1</b><b>GG</b><b>TTTTTT!</b></div> 
<div>Henny <b>1</b><b>GG</b><b>TTTTTT!</b></div> 

そして実際に、私はそれがKennので、このようなこと必要年代とHennymidがT2の内側にない:

<div>Fris <b>1</b><b>GG</b><b>TTTTTT!</b></div> 
<div>Kenn</div> 
<div>Henny</div> 
+1

疑問にもかかわらず、内側ループの前に 'testlist'をクリアする必要があると思います。 'testlist = array();' –

+0

また、使用しているDBとテンプレートライブラリについても言及する必要があります。これにより、コードの読み込みと解釈が容易になります。 –

答えて

2

$testlist変数が異なる値を持っています$xzdtごとにループする必要があります:

$xzdtall = DB::fetch_all("SELECT * FROM t1 ORDER BY mid ASC"); 
foreach ($xzdtall as $xzdt){ 
    // empty $testlist 
    $testlist = array(); 
    $testing = DB::fetch_all("SELECT * FROM t2 WHERE mid = $xzdt['mid'] ORDER BY tid ASC"); 
    foreach($testing as $test){ 
     $testlist[] = $test; 
    } 

    // add `$testlist` to $xzdt 
    $xzdt['t2s'] = $testlist; 

    $xzdtlist[] = $xzdt; 
} 

は、そのようなものは動作するはずです(それが何であるかエンジンを知らない)テンプレートで:$xzdt[t2s]が空でない場合

<!--{loop $xzdtlist $xzdt}--> 
<div>$xzdt[name] <!--{loop $xzdt[t2s] $test}--><b>$test[tcode]</b><!--{/loop}--></div> 
           ^notice variable here 
<!--{/loop}--> 

また、あなたがテストすることができます。

最後に、mysql JOINについて学び、サイクリッククエリをJOINという単一クエリで置き換えることをお勧めします。

+0

はい、これは動作します! 私は内部結合または左結合を試みましたが、データを複製するので、ここでヘルプを見つけるために来ました。 –

+0

こんにちは、ちょうど今、私は問題を見つけようとしています。 –

+0

あなたのコードはうまくいくはずです。もう一度テストし、 '$ xdztlist'を出力して、そこにあるものを見てください。 –

関連する問題