具有条件的Mysql foreach取决于其他表记录

时间:2016-08-22 13:57:56

标签: php mysql for-loop foreach

我有2张桌子。

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              |
+---------------------------+

首先,当我insertt2发送新数据时,我的脚本会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只显示item1item10数据?

以下是我的预期:(如果t2只有1行,我的t1.item也应该有item1

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

如果t2有2行,那么我的t1.item也应该有item1 item2列。所以最终的输出应该是

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

谢谢。

1 个答案:

答案 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;
}