SELECT a.id,
a.username,
a.email,
a.created,
b.user_id,
SUM(b.price) +
SUM(IF(d.beginner =0, 15, 0)) + CASE WHEN SUM(b.price) >499 THEN 100
ELSE 0 END AS points,
SUM(b.price) AS pris,
b.created,
c.user_id,
c.referrer_id,
c.created,
d.id,
d.beginner,
d.winner_id
FROM users a,
accounts b,
referrals c,
product d
WHERE a.created BETWEEN '2013-04-01' AND '2013-06-30'
AND d.created BETWEEN '2013-06-01' AND '2013-06-30'
AND b.created BETWEEN '2013-06-01' AND '2013-06-30'
AND a.id = b.user_id
AND a.id = c.user_id
AND d.winner_id = a.id
GROUP BY c.referrer_id
ORDER BY `points` DESC LIMIT 0 , 3
このクエリには、4 つのテーブルがあります。表とproduct
合わせてこちらも選んでいただきたいですcreated
。しかし、クエリで行ったことが気に入った場合、正しい結果が得られません。このクエリでも製品テーブルを選択したいのですが、6 月 1 日から 6 月 30 日までのレコードのみを選択し、製品テーブルで勝者が見つかった場合に 15 ポイントを追加するという条件に従ってそれらを配置する必要があります。
このSUM( IF( d.beginner =0, 15, 0 ) )
条件が表示された場合、追加しなくても機能AND d.created
BETWEEN '2013-06-01'
AND '2013-06-30'
し、ユーザーが製品テーブルに見つからないが、残りの 2 つの条件から 30 ポイントなどのポイントを持っている場合、このクエリでは表示されません。どうしてか分かりません?製品とアカウントの両方のテーブルを 6 月 1 日から 6 月 30 日まで選択し、ユーザー テーブルを 4 月 1 日から 6 月 30 日まで選択したい
SELECT a.id, a.username, a.email, a.created, b.user_id, SUM( b.price ) +
CASE WHEN SUM( b.price ) >499
THEN 100
ELSE 0
END AS gr, SUM( b.price ) AS pris, b.created, c.user_id, c.referrer_id, c.created
FROM users a, accounts b, referrals c
WHERE a.created
BETWEEN '2013-04-01'
AND '2013-06-30'
AND b.created
BETWEEN '2013-06-01'
AND '2013-06-30'
AND a.id = b.user_id
AND a.id = c.user_id
GROUP BY c.referrer_id
ORDER BY `gr` DESC
LIMIT 0 , 3
これから商品表の状態を削除しました。だから今は簡単に理解できます。6月1日から6月30日までの行のみを選択するテーブルを追加したいproducts
2番目の条件は、列の製品テーブルでユーザーが見つかった場合に15ポイントを追加することですwinner_id
。