繁体   English   中英

运行多个SQL查询以错误的顺序显示

[英]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;
?>

您做错了很多事情:

  1. 您不应在循环内执行sql查询。 这是因为您可以同时使用JOIN和UNION来获得结果。 性能也会更好。

  2. 自PHP5.5起,您正在使用的mysql扩展已弃用。 您应该改用其他东西,例如PDO。

  3. 您显示的代码显然可以正确显示您所看到的内容,并且这样做是正确的。 这是因为您这样做:

    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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM