CargoとOfferの2つのテーブルがあります。特定のユーザーによるオファーがある有効なオファーの数とともに、すべての貨物をリストしたいだけです。テーブル構造は休閑中です:
Cargo-テーブル
CargoIdCargoTime
..
オファー
-
テーブル
OfferIdCargoIdUserId
OfferStatu
..
このシステムでは、ユーザーは貨物に対して複数のオファーを行うことができますが、最新のオファーは特定のユーザーに対して有効であると見なされます。したがって、OfferStatuが1の場合、これは特定のユーザーの以前のオファーを指します。
私は次のようにSQLを書きました:
SELECT cargo.CargoId,cargo.CargoTime,COUNT(offer.OfferId)
FROM cargo INNER join offer on offer.CargoId=cargo.CargoId
WHERE cargo.CargoId in
(
select c.CargoId from cargo as c inner join offer as o
on o.CargoId=c.CargoId
WHERE o.UserId=12
)
and offer.OfferStatu<>1
GROUP BY cargo.CargoId
しかし、このクエリは約1秒で実行されたため、私には多すぎます。もっと効率的な書き方があることは知っていますが、今は苦労しています。