簡體   English   中英

合並兩個 SELECT 語句並返回一個 JSON 響應

[英]Merge two SELECT statements and return one JSON response

我想合並兩個 select 語句的結果並返回一個 JSON 響應。 基本上,我想為找到的每條記錄返回 id、姓名、公司和電子郵件,但如果票證與 POST 數據匹配,則還返回簽名列。

另外,是否可以刪除最終數組中的任何重復記錄?

$selectTable = "tickets_info";
$selectColumns = "id, name, company, email";

$stmt = $conn->prepare("SELECT $selectColumns FROM $selectTable WHERE created BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW() ORDER BY id DESC");
$stmt->execute();

if (isset($_POST['ticket'])) {

    $stmt2 = $conn->prepare("SELECT signature FROM tickets_info WHERE ticket = ?");
    $stmt2->execute(array($_POST['ticket']));

}

$results = $stmt->fetchAll();

if (isset($_POST['ticket'])) {

    $results = $stmt2->fetchAll();

}

if ($results) {

    header("Content-Type: application/json"); 
    echo json_encode($results);

}

我將使用以下內容循環查詢響應:

$stmt = $conn->prepare("SELECT id, name, company, email, signature, ticket FROM tickets_info WHERE created BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW() ORDER BY id DESC");
$stmt->execute() ;
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($rows as $row) {
  $response[$i]['id'] = $row['id'] ;
  $response[$i]['name'] = $row['name'] ;
  $response[$i]['company'] = $row['company'] ;
  $response[$i]['email'] = $row['email'] ;

  if ($row['ticket'] == $_POST['ticket']) $response[$i]['signature'] = $row['signature'] ;
  else $response[$i]['signature'] = NULL ;

  $i++ ;
}

header("Content-Type: application/json"); 
echo json_encode($response);

您只執行一個 SQL 查詢並循環響應一次。 如果該行與 AJAX 票證查詢匹配,我們將簽名添加到對象數組中。 如果沒有,我們將簽名值設置為null

正確的做法是使用Join 如果你不想用 join 來做,你可以先把結果放在兩個不同的數組中。 然后合並這兩個單獨的數組,然后過濾任何重復的數組。

請記住,您希望兩個 Sql 查詢具有相同的鍵。

暫無
暫無

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

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