我有 2 张 table 。 t1
和 t2
。
t1
数据如下:
+--------+---------------+--------------+
| mid | name | desc |
+---------------------------------------+
| 1 | Fris | Helo |
| 2 | Kenn | Wow! |
| 3 | Henny | CCC |
+---------------------------------------+
t2
数据如下:
+--------+---------+----------------+
| tid | mid | tcode |
+-----------------------------------+
| 1 | 1 | 1 |
| 2 | 1 | GG |
| 3 | 1 | TTTTTT! |
+-----------------------------------+
现在我的 php 编码是这样的:
$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;
}
现在我的循环如下:
#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
和 Henny
的 mid
不在 t2 内:
<div>Fris <b>1</b><b>GG</b><b>TTTTTT!</b></div>
<div>Kenn</div>
<div>Henny</div>
最佳答案
$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;
}
然后在你的模板中(不知道它是什么引擎)类似的东西应该可以工作:
<!--{loop $xzdtlist $xzdt}-->
<div>$xzdt[name] <!--{loop $xzdt[t2s] $test}--><b>$test[tcode]</b><!--{/loop}--></div>
^ notice variable here
<!--{/loop}-->
您还可以测试 $xzdt[t2s]
是否不为空。
最后,我建议您了解 mysql JOIN
并将您的循环查询替换为带有 JOIN
的单个查询。
关于php - foreach中的foreach?显示不正确的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39817819/