【发布时间】:2013-07-31 20:11:19
【问题描述】:
我目前正在开发一个拍卖系统,功能齐全。我现在需要在用户的个人资料中添加一个计数,以显示用户当前竞标的商品数量。
系统由两个关键表组成(当然系统中有额外的表功能,但这些是与此问题相关的唯一表):
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 获得最高出价者并添加出价者所需的信息,例如所有出价的计数。希望这会有所帮助
-
获取其他信息没问题 - 我只需要计数。
-
我很懒,所以我会将拍卖表非规范化并保留对最高出价者的引用。这样就很简单了:)
-
是的,我想过这样做,但下面的查询似乎相对简单。