[英]Running multiple SQL Queries are displaying in the wrong order
我正在尝试运行以下SQL查询:
$sql2="SELECT * from client where parent_client_id = '".$result["customerid"]."' ";
$rs2=mysql_query($sql2,$pbx01_conn) or die(mysql_error());
while($result2=mysql_fetch_array($rs2)) {
$sql3="SELECT * from extension where client_id = '".$result2["id"]."' and type = 'term' ";
$rs3=mysql_query($sql3,$pbx01_conn) or die(mysql_error());
if(mysql_num_rows($rs3) > 0) {
$result3=mysql_fetch_array($rs3);
echo '<tr class="notfirst" style="cursor:pointer;" onclick="document.location=\'sip:'.$result["customerid"].'*'.$result3["number"].'\'">
<td>'.$result2["name"].'</td>
<td>'.$result["customerid"].'*'.$result3["number"].'</td>
<td>Phone Terminal</td>
</tr>';
}
$sql3="SELECT * from extension where client_id = '".$result2["id"]."' and type = 'queue' ";
$rs3=mysql_query($sql3,$pbx01_conn) or die(mysql_error());
if(mysql_num_rows($rs3) > 0) {
$result3=mysql_fetch_array($rs3);
echo '<tr class="notfirst" style="cursor:pointer;" onclick="document.location=\'sip:'.$result["customerid"].'*'.$result3["number"].'\'">
<td>'.$result2["name"].'</td>
<td>'.$result["customerid"].'*'.$result3["number"].'</td>
<td>Queue</td>
</tr>';
}
因此,如果在第一个$ sql3上返回了4行,则应为:
Phone Terminal
Phone Terminal
Phone Terminal
Phone Terminal
在第二个$ sql3上,返回1应该是:
Queue
但它的显示像
Phone Terminal
Phone Terminal
Phone Terminal
Queue
Phone Terminal
我做错了什么?
只需检查何时连接字符串,而不是回显是否存在相同的问题。
<?php
$sql2 = "SELECT * from client where parent_client_id = '".$result["customerid"]."' ";
$rs2 = mysql_query($sql2,$pbx01_conn) or die(mysql_error());
$rows = '';
while ($result2 = mysql_fetch_array($rs2)) {
$sql3 = "SELECT * from extension where client_id = '".$result2["id"]."' and type = 'term' ";
$rs3 = mysql_query($sql3,$pbx01_conn) or die(mysql_error());
if (mysql_num_rows($rs3) > 0) {
$result3 = mysql_fetch_array($rs3);
$rows .= '<tr class="notfirst" style="cursor:pointer;" onclick="document.location=\'sip:'.$result["customerid"].'*'.$result3["number"].'\'">
<td>'.$result2["name"].'</td>
<td>'.$result["customerid"].'*'.$result3["number"].'</td>
<td>Phone Terminal</td>
</tr>';
}
$sql3 = "SELECT * from extension where client_id = '".$result2["id"]."' and type = 'queue' ";
$rs3 = mysql_query($sql3,$pbx01_conn) or die(mysql_error());
if (mysql_num_rows($rs3) > 0) {
$result3 = mysql_fetch_array($rs3);
$rows .= '<tr class="notfirst" style="cursor:pointer;" onclick="document.location=\'sip:'.$result["customerid"].'*'.$result3["number"].'\'">
<td>'.$result2["name"].'</td>
<td>'.$result["customerid"].'*'.$result3["number"].'</td>
<td>Queue</td>
</tr>';
}
}
echo $rows;
?>
您做错了很多事情:
您不应在循环内执行sql查询。 这是因为您可以同时使用JOIN和UNION来获得结果。 性能也会更好。
自PHP5.5起,您正在使用的mysql扩展已弃用。 您应该改用其他东西,例如PDO。
您显示的代码显然可以正确显示您所看到的内容,并且这样做是正确的。 这是因为您这样做:
if(mysql_num_rows($ rs3)> 0){
然后针对第二个查询再次执行此操作:
if(mysql_num_rows($rs3) > 0) {
该代码贯穿两个if语句,因为它们都为true,因此显示了您所看到的。 对于同一客户,您很可能同时具有扩展名'term'和'queue'。 如果您不想同时显示同一个客户端,请使用if或继续。
我已经通过在while循环中为每个查询创建变量来解决此问题
然后在while循环之外,我完成了:
echo $term;
echo $queue;
echo $ivr;
echo $voicecentre;
echo $conference;
echo $callback;
echo $intercom;
echo $queuecentre;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.