简体   繁体   English

合并两个 SELECT 语句并返回一个 JSON 响应

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

I would like to merge the results of two select statements and return one single JSON response.我想合并两个 select 语句的结果并返回一个 JSON 响应。 Basically, I want to return id, name, company, and email for every record found, but also return the signature column if the ticket matches the POST data.基本上,我想为找到的每条记录返回 id、姓名、公司和电子邮件,但如果票证与 POST 数据匹配,则还返回签名列。

Also, is it possible to remove any duplicate records in the final array?另外,是否可以删除最终数组中的任何重复记录?

$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);

}

I would loop through the query response with something along these lines:我将使用以下内容循环查询响应:

$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);

You only do one SQL query and loop through the response once.您只执行一个 SQL 查询并循环响应一次。 If that row matches the AJAX ticket query, we add the signature to the array of objects.如果该行与 AJAX 票证查询匹配,我们将签名添加到对象数组中。 If not, we set the signature value to null .如果没有,我们将签名值设置为null

The right way to do is use Join .正确的做法是使用Join If you don't want to do it with join you can first put the results in two different arrays.如果你不想用 join 来做,你可以先把结果放在两个不同的数组中。 then merge those two seperate arrays and then filter any duplicate arrays.然后合并这两个单独的数组,然后过滤任何重复的数组。

Remember you want to have the same keys for both Sql Queries.请记住,您希望两个 Sql 查询具有相同的键。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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