【问题标题】:MySQL Combining two queries into JSON objectMySQL将两个查询组合成JSON对象
【发布时间】:2014-03-02 02:06:17
【问题描述】:

考虑这两个查询:

$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 的总投标数。 结果如下:

[{"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 对象将大大简化前端的编码。

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

【问题讨论】:

  • 那么,只需将这两条数据放入一个数组或对象中您对其进行 JSON 编码并将其发送到客户端......
  • 或者您可以在第二个 (count) 查询中作为第一个字段进行子选择。第二个是计数加上itemNo,第一个也有。

标签: php jquery mysql ajax json


【解决方案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

【讨论】:

  • 好吧,我能说什么...即插即用查询!我还在纠结第一个查询。我已经两年没有接触过 SQL,只是经过一些基础培训。这是太棒了。非常感谢贾里德。
  • 刚刚意识到您不需要子查询中的GROUP BY rq3.itemNo 部分,因为它已经找到了特定的itemNo。可能不会有任何区别,但看起来确实很奇怪。
猜你喜欢
  • 2018-08-07
  • 2013-09-13
  • 1970-01-01
  • 2016-11-12
  • 2021-05-02
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多