我正在寫一個SQL查詢,這將返回一個特定用戶的拍賣清單失去,就像在eBay上。如何修復此SQL查詢返回不正確的值?
這是我的表:
bid_id bid_belongs_to_auction bid_from_user bid_price
6 7 1 15.00
8 7 2 19.00
13 7 1 25.00
有問題的區域是這樣的(從我的完整的查詢採取放置在問題的末尾):
AND EXISTS (
SELECT 1
FROM bids x
WHERE x.bid_belongs_to_auction = bids.bid_belongs_to_auction
AND x.bid_price > bids.bid_price
AND x.bid_from_user <> bids.bid_from_user
)
的問題是,查詢返回出價更高的所有拍賣,但會忽略用戶的更高出價。
所以,當工作上面的查詢爲例:
bid_id bid_belongs_to_auction bid_from_user bid_price
6 7 1 15.00
7 7 2 18.00
在這種情況下,用戶1返回失去了拍賣,因爲有另一個出價高於用戶出價。
但是,這裏是當查詢不起作用:
bid_id bid_belongs_to_auction bid_from_user bid_price
6 7 1 15.00
8 7 2 19.00
13 7 1 25.00
在這種情況下,用戶1被錯誤地返回失去了拍賣,因爲有比的彼此競價更高了之前的出價爲,但用戶已經爲此投標了更高的出價。
如果它是重要的,這是我的完整的查詢,但我認爲這不會是解決上述問題的必要的,但我在這裏反正張貼:
$query = "
SELECT
`bid_belongs_to_auction`,
`auction_unixtime_expiration`,
`auction_belongs_to_hotel`,
`auction_seo_title`,
`auction_title`,
`auction_description_1`
FROM (
SELECT
`bid_belongs_to_auction`,
`bid_from_user`,
MAX(`bid_price`) AS `bid_price`,
`auctions`.`auction_enabled`,
`auctions`.`auction_unixtime_expiration`,
`auctions`.`auction_belongs_to_hotel`,
`auctions`.`auction_seo_title`,
`auctions`.`auction_title`,
`auctions`.`auction_description_1`
FROM `bids`
LEFT JOIN `auctions` ON `auctions`.`auction_id`=`bids`.`bid_belongs_to_auction`
WHERE `auction_enabled`='1' AND `auction_unixtime_expiration` > '$time' AND `bid_from_user`='$userId'
AND EXISTS (
SELECT 1
FROM bids x
WHERE x.bid_belongs_to_auction = bids.bid_belongs_to_auction
AND x.bid_price > bids.bid_price
AND x.bid_from_user <> bids.bid_from_user
)
GROUP BY `bid_belongs_to_auction`
) AS X
WHERE `bid_from_user`='$userId'
";
它有助於發佈DDL和INSERT語句,因此我們不必對您的查詢進行反向工程,以在我們自己的計算機上構建可比較的表。 – 2011-06-08 12:54:08