想象一下拍卖(例如eBay拍卖)。您创建了一个拍卖,设置了起始出价值,例如5美元。这将作为最低竞标价格存储到auctions表中。此时,此拍卖的 当前 竞标价格为 5美元 。
auctions
现在,如果有人竞标您的拍卖,比如说10美元,这笔钱将被存储到bids表中。此时,此拍卖的 当前 竞标价格为 10美元 。
bids
现在,假设您要检索5个最便宜的拍卖。您将编写如下查询:
SELECT `auction_id`, `auction_startPrice`, MAX(bids.bid_price) as `bid_price` FROM `auctions` LEFT JOIN `bids` ON `auctions`.`auction_id`=`bids`.`bid_belongs_to_auction` GROUP BY `auction_id` LIMIT 5
非常简单,而且有效!但是现在您需要ORDER BY在查询中添加一个子句。问题是,但是,我们希望ORDER BY 无论是 通过auctions.auction_startPrice 或 通过bid_price,取决于 两者的这种较高 ,如在第一段落解释。
ORDER BY
auctions.auction_startPrice
bid_price
可以理解吗?我知道如何使用2个查询来执行此操作,但我希望可以通过1个查询来完成。
谢谢!
编辑:只是进一步的解释,以帮助您想象问题。如果设置ORDER BY auction_startPrice ASC,那么我将以最低的最低竞标价格获得5个拍卖,但是如果已经对这些拍卖进行了投标该怎么办?那么,它们当前的最低价格等于这些出价,而不是起始价格,因此我的查询是错误的。
ORDER BY auction_startPrice ASC
SELECT `auction_id`, `auction_startPrice`, `bid_price` FROM ( SELECT `auction_id`, `auction_startPrice`, MAX(bids.bid_price) as `bid_price`, IF(MAX(bids.bid_price)>`auction_startPrice`, MAX(bids.bid_price), `auction_startPrice`) higherPrice FROM `auctions` LEFT JOIN `bids` ON `auctions`.`auction_id`=`bids`.`bid_belongs_to_auction` GROUP BY `auction_id` ) X order by higherPrice desc LIMIT 5;
笔记:
MAX(bid_price)
startprice
higherPrice