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

时间:2014-02-21 12:47:02

标签: php mysql

我正在尝试运行这些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

我做错了什么?

3 个答案:

答案 0 :(得分:0)

只需检查何时连接字符串而不是回显,就会遇到同样的问题。

<?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 :(得分:0)

你做错了很多事:

  1. 你不应该在循环中进行sql查询。这是因为在您的情况下,您可以同时使用JOIN和UNION来获得结果。表现也会更好。

  2. 您使用的mysql扩展程序是PHP5.5的弃用版本。您应该使用其他内容,例如PDO。

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

    if(mysql_num_rows($ rs3)&gt; 0){

  4. 然后对于第二个查询再次执行此操作:

    if(mysql_num_rows($rs3) > 0) {
    

    代码贯穿两个if语句,因为两者都是真的,从而显示你看到的内容。您很可能同时拥有同一客户端的扩展名“term”和“queue”。 如果您不想同时显示同一客户端,请使用if else或continue;

答案 2 :(得分:0)

我通过在while循环中创建每个查询的变量来解决这个问题

然后在while循环之外,我完成了:

    echo $term;
    echo $queue;
    echo $ivr;
    echo $voicecentre;
    echo $conference;
    echo $callback;
    echo $intercom;
    echo $queuecentre;