如何在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']; ?> &nbsp; 
<?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内部正确循环的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中的另一个 while 循环中正确地创建一个 while 循环?

如何在while中正确循环?

如何在while循环spritekit内部生成之前等待

如何正确地为密码做一个while循环

如何使用while循环正确修改整数

Python:发生外部异常时如何正确继续while循环