次の解決策を探しています。
users テーブルに移動し、サイトにアイテムをリストしたユーザーを見つけます。この users テーブルには、オークションに関する列はありません。代わりに、キーを使用してアカウント テーブルに接続されます (アカウントでは、この列はユーザーと呼ばれます)。
これらの ID (オークションにアイテムを出品したユーザー) から、アカウントの残高を見つける必要があります。これは、アカウント テーブルにもあります。残高は、operation_amount という列に含まれています。また、ユーザーの残高がプラスかマイナスかを示す operation_type という別の列もあります。たとえば、操作タイプ = 1 の場合、彼の残高はマイナスであり、操作タイプ = 2 の場合、彼の残高はプラスです。
tmpinvoice
これで、amount という列がある別のテーブルができました。これは、ユーザーがサイト管理者に支払う必要のある料金を示しています。
これを考えると、彼が合計でいくら支払わなければならないかを計算する必要があります。たとえば、ユーザーの残高が 200 ドルの場合、に基づいてマイナスかプラスかを確認する必要がありoperation_type
ます。
だから私はクエリを持っていますこれはレコードに対してのみ行います
SELECT u.id AS id_user, u.nick,
CASE ac.operation_type WHEN 1 THEN ac.operation_amount - tm.amount
WHEN 2 THEN ac.operation_amount + tm.amount
ELSE 'N/A' END AS `fee`
FROM auctionbg_search.accounts AS ac
LEFT JOIN auctionbg_search.users AS u ON TRUE
AND u.id = ac.user
LEFT JOIN auctionbg_search.auctions AS a ON TRUE
AND a.id = ac.auction
LEFT JOIN auctionbg_search.tmpinvoice AS tm ON TRUE
WHERE TRUE
AND tm.amount = ac.operation_amount
ここで私が受け取っている結果
http://gyazo.com/3d7e7f52ee14d21cc8c8d33b6bbc479a
はい、しかしこれは列の1つの値に対してのみ「料金」を計算します。ユーザーが複数の値を持っている場合はどうなりますか
このユーザーのように:
http://gyazo.com/c3bdb29fa235044ab888dc0385bbcdbd
その特定のユーザーの operation_amount から合計金額を計算しtmpinvoice
、その合計金額から削除する必要があります。
友人が使うように言った
IF(SUM(ac.operation_amount), IS NULL , 0, sum(ac.operation_amount)
+と-の両方の場合の2つの時間アカウント(テーブル)を結合するには
+ で 1 回、 - で 2 回参加
しかし、私は意志がどのように見えるかわかりません:)