【问题标题】:Mysql foreach with condition depends on other table record带条件的mysql foreach依赖于其他表记录
【发布时间】:2016-08-22 13:57:55
【问题描述】:

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

首先,我的脚本当我将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 也应该有 item1 item2 列。所以最终的输出应该是

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

谢谢。

【问题讨论】:

  • 您的问题不清楚。请包括您想要的输出。
  • 我已经编辑了我的问题,请看一下,谢谢。

标签: php mysql for-loop foreach


【解决方案1】:

不确定我是否理解这个问题,但您不需要简单地连接表格吗?

$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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 2014-07-02
    • 2019-06-13
    • 1970-01-01
    相关资源
    最近更新 更多