如何在while内部正确循环
Posted
技术标签:
【中文标题】如何在while内部正确循环【英文标题】:How to looping correctly while inside while 【发布时间】:2016-04-03 14:21:05 【问题描述】:我的查询有点问题,我的查询是:
SELECT * FROM tkursi WHERE tkursi.no_kursi NOT IN
(SELECT no_kursi FROM tpesanantiket LEFT join tpenjadwalantiket ON
tpenjadwalantiket.id_perjalanan=tpesanantiket.id_perjalanan LEFT JOIN tbus ON
tbus.id_bus=tpenjadwalantiket.id_bus WHERE tbus.id_bus='$bus' AND
tpesanantiket.id_perjalanan='$trip') ORDER BY no_kursi ASC
此查询显示 no_kursi,其中某些数字未显示已订购的状态。
我想在列表 no_kursi 中更改 no_kursi ,其中订购的一种状态仍显示但已订购评论,其他颜色背景或无法点击。
我尝试在while里面使用while,但它不能正常工作。
<table class=" table table-bordered table-striped">
<?php
$s = mysqli_query($koneksidb, "SELECT * FROM tkursi ORDER BY no_kursi ASC");
while ($kolomData = mysqli_fetch_array($s))
$x = mysqli_query($koneksidb, "SELECT no_kursi FROM tpesanantiket
LEFT join tpenjadwalantiket ON tpenjadwalantiket.id_perjalanan=tpesanantiket.id_perjalanan
LEFT JOIN tbus ON tbus.id_bus=tpenjadwalantiket.id_bus
WHERE tbus.id_bus='$Bus' AND tpesanantiket.id_perjalanan='$Trip'
GROUP BY no_kursi");
while ($kolomx = mysqli_fetch_array($x))
?>
<tr>
<td > <input type="radio" name="tambah3" value="<?php echo $kolomData['no_kursi']; ?>"
<?php echo ($data7==$kolomData['no_kursi']) ? "checked" : "" ; ?>/>
<label class="inline" for="<?php echo $kolomData['no_kursi']; ?>">
<?php echo $kolomData['no_kursi']; ?>
<?php if ($kolomData['no_kursi']==$kolomx['no_kursi'])
?> ordered
<?php ?>
</label> </td>
</tr>
<?php
?>
结果在一些 no_kursi 中排序,但循环太多。
已编辑数据库显示: $s : no_kursi 001 002 003 004 005 006 007 ... 043 $x : no_kursi 005 006
结果: no_kursi 001 001 002 002 003 003 004 004 005 已订购 005 006 已订购 006 007 007 ... 043 043
结果循环与 $x 结果一样多。
【问题讨论】:
如果您添加数据库转储和预期输出,其他人将很容易理解。 已编辑,希望通俗易懂。谢谢建议 我建议您不要在循环中使用查询。 那么你期望的输出是什么?只有第一个循环? @Hafidh;我真的无法理解您在问题中使用的语言(无意冒犯),这就是为什么我不能说这样做或那样。但是我的意思是,如果我是你,我会尝试一种方法,在开始与它们相关的任何循环之前,急切加载所需的所有数据。 【参考方案1】:您可以更改您的查询..
SELECT tkursi.*,CASE WHEN q.no_tkursi IS NULL THEN 0 ELSE 1 END AS is_orderer FROM tkursi LEFT JOIN (select no_tkursi FROM tpesanantiket 左加入 tpenjadwalantiket ON tpenjadwalantiket.id_perjalanan=tpesanantiket.id_perjalanan 左加入 tbus ON tbus.id_bus=tpenjadwalantiket.id_bus WHERE tbus.id_bus='$Bus' AND tpesanantiket.id_perjalanan='$Trip') AS q ON q.no_tkursi = tkursi.no_tkursi ORDER BY tkursi.no_tkursi
你有一个独特的查询。
这个查询可能会更好。没有子查询。但我不知道你的数据库结构。
你的结果应该是……
no_kursi | .... | is_orderer
1 | .... | 0
....
5 | .... | 1
6 | .... | 1
7 | .... | 0
【讨论】:
谢谢,只需更改 no_kursi 而不是 no_tkursi。非常有用,有时我忘记使用自己创建的变量/列。 我很高兴能提供帮助。 :)以上是关于如何在while内部正确循环的主要内容,如果未能解决你的问题,请参考以下文章