簡體   English   中英

為什么我的查詢返回不正確的結果?

[英]Why is my query returning incorrect results?

大約兩周前我最近問了一個類似的問題,但是我沒有看到我的問題以我需要的方式運行。

我有一個從2個表中選擇的查詢; 門票和回復。 我正在從故障單表中選擇信息,並且我從回復表中選擇了存儲有票證ID的信息。 這就是我的問題。

我的查詢只顯示回復超過0的票證,但我需要它才能顯示票證信息,即使它沒有任何回復。

我想知道(如果可能的話)是否有任何方法可以解決我的問題,如果有辦法讓它比我現在擁有它更簡單。

現在它有點亂,但這是我的代碼,用於查詢和顯示故障單和回復。

 if(isset($_GET['id']) && is_numeric($_GET['id'])) {
    $id = trim($_GET['id']);
    $i = "";

    $ticket = $db->conn->query("
                                SELECT * FROM tickets
                                INNER JOIN replies ON tickets.id = '$id'") or die(mysqli_error($db->conn));

    while($rows = $ticket->fetch_assoc()) {
        $i++;
        if($_SESSION['ticket_username'] == $rows['client']) {
            if($i <= 1) {
                $status = $rows['status'];
                echo '
                    <h3>'.$rows['subject'].'</h3><hr>

                    <div class="panel panel-danger">
                    <div class="panel-heading">
                        <h3 class="panel-title"><small>Created by '.$rows['client'].', '.$timeAgo->inWords($rows['created_at']).'</small></h3>
                    </div>
                    <div class="panel-body">'.nl2br($rows['message']).'</div>
                    </div>
                ';
            }

            echo '
                <div class="panel panel-info">
                    <div class="panel-heading">
                        <h3 class="panel-title"><small>Reply from '.$rows['reply_username'].', '.$timeAgo->inWords($rows['reply_time']).'</small></h3>
                    </div>
                    <div class="panel-body">'.nl2br($rows['reply_message']).'</div>
                    </div>
                ';

        } else {
            header("Location: index");
        }
    }
} else {
    header("Location: index");
}

更改查詢。

使用LEFT JOIN而不是INNER JOIN

$ticket = $db->conn->query("SELECT * FROM tickets
LEFT JOIN replies ON tickets.id = '$id'") or die(mysqli_error($db->conn));

在此輸入圖像描述

說明:

  1. 內部聯接僅返回兩個表的值獲得匹配。 這是兩個圓圈的交集。
  2. Left Join返回左表中的所有行,而不管它是否在右表中有任何匹配。

在您的情況下,如果您使用內部聯接,它只返回那些有回復的票證。

圖片來自這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM