MySQL将两个查询组合成JSON对象

时间:2014-03-02 02:06:17

标签: php jquery mysql ajax json

考虑以下两个问题:

$sql = "select rq1.itemNo, rq1.bid, rq1.bidDate 
from encan rq1 
left outer join encan rq2
on(rq1.itemNo = rq2.itemNo and rq1.bid < rq2.bid)
where rq2.itemNo is null
order by itemNo";

$sql2 = "SELECT itemNo, count(*) as totalBid 
FROM encan 
GROUP BY itemNo 
ORDER BY itemNo ASC;";

第一个查询通过itemNo和bidDate为我提供了最高出价。 这是JSON结果:

[{"itemNo":"Item #1","bid":"140","bidDate":"2014-03-01"},{"itemNo":"Item #2","bid":"110","bidDate":"2014-01-26"},{"itemNo":"Item #3","bid":"70","bidDate":"2014-01-24"},{"itemNo":"Item #7","bid":"30","bidDate":"2014-01-30"},{"itemNo":"Item #8","bid":"40","bidDate":"2014-01-28"}]

第二个给出了每个商品的总出价数量。 结果如下:

[{"itemNo":"Item #1","totalBid":4},{"itemNo":"Item #2","totalBid":3},{"itemNo":"Item #3","totalBid":3},{"itemNo":"Item #7","totalBid":2},{"itemNo":"Item #8","totalBid":2}]

我想在第一个查询中包含总出价,所以我不会尝试将两个不同的结果转移到AJAX。我使用返回的结果将数据更新为我的HTML。

我设法弄清楚如何获取第一个查询的结果并通过AJAX / jQuery操作它并更新我的HTML。我不认为有第二个AJAX调用来获得第二个结果是正确的方法。让两个查询结果返回一个JSON对象可以简化前端的编码。

任何帮助将不胜感激。感谢。

1 个答案:

答案 0 :(得分:1)

我认为你可以组合查询:

SELECT 
   rq1.itemNo
 , rq1.bid
 , rq1.bidDate 
 , (
    SELECT COUNT(*)
    FROM encan rq3
    WHERE rq1.itemNo = rq3.itemNo
    GROUP BY rq3.itemNo 
) AS totalBid
FROM encan rq1 
LEFT OUTER JOIN encan rq2 ON (
  rq1.itemNo = rq2.itemNo 
  AND rq1.bid < rq2.bid
)
WHERE rq2.itemNo IS NULL
ORDER BY rq1.itemNo

如果您希望出价计数是一个物理上独立的结构,请执行CBroe建议的内容,并将两个查询的结果放入arrayjson_encode() array而不是。