4

私は現在、オークション システムに取り組んでおり、機能はすべて完了しています。ここで、ユーザーが現在入札しているアイテムの数を示すカウントをユーザーのプロファイルに追加する必要があります。

システムは 2 つの主要なテーブルで構成されています (もちろんシステムには追加のテーブル機能がありますが、この問題に関連するテーブルはこれらだけです)。

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

4

2 に答える 2

2

subs クエリを実行してすべてのアイテムの最新の入札を取得し、それを 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
于 2013-07-31T11:53:29.983 に答える