1

を使用して2つのテーブルから選択するこのPHPコードがありますUNION

$sql3="
    SELECT 
    sequence, 
    ticket_seq, 
    notes as displaydata, 
    datetime as timestamp, 
    updatedby, 
    CONCAT('<strong>Time Start: </strong>',timestart,' - <strong>Time End: </strong>',timeend) as timestartend
    from ticket_updates where ticket_seq = '".$_GET["seq"]."'

    UNION

    SELECT 
    sequence, 
    ticket_seq, 
    description as displaydata, 
    datetime as timestamp,  
    changed_by as updatedby, 
    blankfield
    from ticket_changes where ticket_seq = '".$_GET["seq"]."' 

    ORDER by timestamp ASC ";

    $rs3=mysql_query($sql3,$conn) or die(mysql_error());
    while($result3=mysql_fetch_array($rs3))
    {
        $timestartend2 = ($result3["timestartend"] > '') ? '<br><br>'.$result3["timestartend"] : '';

        $sql9="SELECT *,  TIMEDIFF( timeend, timestart ) AS support_time_used FROM ticket_updates WHERE sequence = '".$result3["sequence"]."' ";
        $rs9=mysql_query($sql9,$conn) or die (mysql_error());
        $result9=mysql_fetch_array($rs9);
        $update_times = 'Time Took: '.$result9["support_time_used"];

        echo '<tr>
                    <td colspan="2" bgcolor="#666666" align="left"><font color="#FFFFFF"><strong>'.$result3["updatedby"].'</strong></font></td>
                    <td bgcolor="#666666" align="right"><font color="#FFFFFF"><strong>'.$result3["timestamp"].'</strong></font></td>
                </tr>
                <tr>
                    <td colspan="3">'.nl2br(stripslashes($result3["displaydata"])).''.$timestartend2.'<br><br>'.$update_times.'</td>
                </tr>
                <tr>
                    <td colspan="3"></td>
                </tr>';
    }

whileループ内には、時間差を見つける別のSQLクエリがありますが、結果/行がテーブルではなく($sql9)呼び出されたテーブルから来ている場合にのみ、そのデータを表示する必要があります。ticket_updatesticket_changes

どうすればこれを達成できますか?

4

1 に答える 1

1

もっと良い方法があるかもしれませんが、クエリを変更して、データがどのテーブルから来ているかを確認できると思います。結果に新しい列(「rowTable」)が表示され、コードに表示されますあなたはそれを使用することができます:

$sql3="
SELECT 
'ticket_updates' as rowTable,
sequence, 
ticket_seq, 
notes as displaydata, 
datetime as timestamp, 
updatedby, 
CONCAT('<strong>Time Start: </strong>',timestart,' - <strong>Time End: </strong>',timeend) as timestartend
from ticket_updates where ticket_seq = '".$_GET["seq"]."'

UNION

SELECT 
'ticket_changes' as rowTable,
sequence, 
ticket_seq, 
description as displaydata, 
datetime as timestamp,  
changed_by as updatedby, 
blankfield
from ticket_changes where ticket_seq = '".$_GET["seq"]."' 

ORDER by timestamp ASC ";

    $rs3=mysql_query($sql3,$conn) or die(mysql_error());
while($result3=mysql_fetch_array($rs3))
{
    $timestartend2 = ($result3["timestartend"] > '') ? '<br><br>'.$result3["timestartend"] : '';
if ($result3['rowTable'] == 'ticket_updates') {
    $sql9="SELECT *,  TIMEDIFF( timeend, timestart ) AS support_time_used FROM ticket_updates WHERE sequence = '".$result3["sequence"]."' ";
    $rs9=mysql_query($sql9,$conn) or die (mysql_error());
    $result9=mysql_fetch_array($rs9);
    $update_times = 'Time Took: '.$result9["support_time_used"];
} else {
    $update_times = 'N/A';
}
    echo '<tr>
                <td colspan="2" bgcolor="#666666" align="left"><font color="#FFFFFF"><strong>'.$result3["updatedby"].'</strong></font></td>
                <td bgcolor="#666666" align="right"><font color="#FFFFFF"><strong>'.$result3["timestamp"].'</strong></font></td>
            </tr>
            <tr>
                <td colspan="3">'.nl2br(stripslashes($result3["displaydata"])).''.$timestartend2.'<br><br>'.$update_times.'</td>
            </tr>
            <tr>
                <td colspan="3"></td>
            </tr>';
}
于 2013-08-05T11:08:03.900 に答える