mysql – 计算用户是高出价者的所有项目

我目前正在开发拍卖系统,功能齐全.我现在需要在用户的个人资料中添加一个计数,该计数显示用户当前正在出价的项目数.

该系统包含两个关键表(当然系统中有额外的表功能,但这些是与此问题相关的唯一表):

item_sales:

+-----+------------------+------------+-------------+---------+
| id  |  selling_format  |  duration  |  list_date  |  buyer  |
+-----+------------------+------------+-------------+---------+

item_sales_bids:

+-----+-------------+-----------+---------------+-----------+--------+
| id  |  sale_item  |  user_id  |  current_bid  |  max_bid  |  date  |
+-----+-------------+-----------+---------------+-----------+--------+

item_sales_bids.date是出价时间的Unix时间戳.

我可以轻松获得给定用户使用以下查询进行的所有出价的计数:

   SELECT COUNT(DISTINCT(`item_sales_bids`.`user_id`)) AS `total`,
          SUM((`sale`.`list_date` + (`sale`.`duration` * 86400)) - UNIX_TIMESTAMP()) AS `endTime`
     FROM `item_sales_bids`
INNER JOIN `item_sales` `sale` ON `item_sales_bids`.`sale_item` = `sale`.`id`
     WHERE `user_id` = 1
  GROUP BY `sale_item`
    HAVING `endTime` > 0

我想做的是运行类似于上面的查询,但仅包括指定用户是当前最高出价者的记录(即给定项目的出价集的最大ID条目具有user_id值=对于我们的用户) .

不幸的是,我对如何实现这一点感到茫然.

我已经设置了一个SQLFiddle来协助> http://sqlfiddle.com/#!2/b98e4/3

最佳答案 执行子查询以获取所有项目的最新出价,然后将其加入item_sales_bids以仅处理最新项目.

像这样: –

SELECT COUNT(DISTINCT(item_sales_bids.user_id)) AS total,
SUM((sale.list_date + (sale.duration * 86400)) - UNIX_TIMESTAMP()) AS endTime
FROM item_sales_bids
INNER JOIN item_sales sale ON item_sales_bids.sale_item = sale.id
INNER JOIN
(
    SELECT sale_item, MAX(id) AS LatestBid
    FROM item_sales_bids
    GROUP BY sale_item
) Sub1
ON item_sales_bids.sale_item = Sub1.sale_item AND item_sales_bids.id = Sub1.LatestBid
WHERE user_id = 1
GROUP BY item_sales_bids.sale_item
HAVING endTime > 0
点赞