2016-08-22 56 views
0

我有2個表。有條件的Mysql foreach取決於其他表記錄

t1t2

t1正在存儲地圖信息。

t2是存儲一些額外的信息t1

t1表如下:

+--------+-----------+-----------+------------+-----------+ 
| ID  | maptitle | item1  | item2  |item.$x | 
+--------+-----------+-----------+------------+-----------+ 
| 1  | Amap  | 1000  | 2000  |x   | 
| 2  | Bmap  | 2000  | 3000  |x   | 
| 3  | Cmap  | 3000  | 4000  |x   | 
+---------------------------------------------------------+ 

itemx是取決於多少行t2 t2表如下:

+----------+----------------+ 
| ID  | title   | 
+----------+----------------+ 
| 1  | extra1   | 
| 2  | extra2   | 
| x  | x    | 
+---------------------------+ 

冷杉st,我的腳本當我insert一個新的數據到t2,t1會加item.$x$xt2的ID。但我面對的一個問題,當我query數據和我的編碼,現在如下:

$mapslist = DB::fetch_all("SELECT * FROM ".DB::table('t1')." ORDER BY id ASC"); 
foreach($mapslist as $mn => $ml){ 
    $mapslista[] = $ml; 
} 

我的輸出編碼的HTML:

<!--{loop $mapslista $mn $ml}--> //This is looping in my html 
    <div>{$ml[id]} , {$ml[maptitle]} {$ml[item.$x]}</div> 
<!--{/loop}--> //Looping END 

//below is what I guess 
<!--{loop $mapslista $mn $ml}--> //This is looping in my html 
    <div>{$ml[id]} , {$ml[maptitle]} , <!--{loop again}-->{$ml[item]}, {$ml[item2]} {$ml[item3]} <--{/loop}--></div> //the $ml[item.$x], the $x is depend on how many row in t2 
<!--{/loop}--> //Looping END 

最終輸出如下(HTML):

1 , Amap 
2 , Bmap 
3 , Cmap 

我的問題是,如果我的t2只得到ID 1,那麼t1只顯示item1的數據?如果我的t2得到了10 rows data,那麼t1只顯示item1直到item10數據?

下面是我所期望的:(例如,如果t2只有1行,我t1.item也應該有item1

1 , Amap , 1000 
2 , Bmap , 2000 
3 , Cmap , 3000 

例如,如果t2有2行,那麼我t1.item也應該有item1item2列。所以最終的輸出應該是

1, Amap , 1000 , 2000 
2, Bmap , 2000 , 3000 
3, Cmap , 3000 , 4000 

謝謝。

+2

你的問題還不清楚。請包括你想要的輸出。 –

+0

我已編輯我的問題,請看看,謝謝。 –

回答

0

不知道我是否理解這個問題,但是您是否需要簡單地連接表?

$mapslist = DB::fetch_all("SELECT * FROM ".DB::table('t1')." AS t1 LEFT JOIN ".DB::table('t2')." AS t2 ON t2.id = t1.item.$x ORDER BY t1.id ASC"); 
foreach($mapslist as $mn => $ml){ 
    $mapslista[] = $ml; 
}