0

sを使用した次のクエリがありますJOIN。それは言う:

不明な列m.bv..

見て、私が間違っていることを教えていただけませんか?

$query4 =  'SELECT u.*, SUM(c.ts) AS total_sum1, SUM(m.bv) AS total_sum 
FROM users u 
LEFT JOIN 
 (SELECT user_id ,SUM(points) AS ts FROM coupon GROUP BY user_id) c 
 ON u.user_id=c.user_id 
LEFT JOIN 
 (SELECT user_id ,SUM(points) AS bv FROM matching GROUP BY user_id) r 
ON u.user_id=m.user_id 
where u.user_id="'.$_SESSION['user_name'].'"
GROUP BY u.user_id';
4

3 に答える 3

1

SUM(points) AS bvエイリアスを持つテーブルから選択していますが、エイリアスを持つrテーブルはありませんm。そのため、r.bv代わりに次のようにする必要があります。

SELECT 
  u.*, 
  SUM(c.ts) AS total_sum1, 
  SUM(r.bv) AS total_sum 
FROM users u 
LEFT JOIN 
(
    SELECT 
      user_id,
      SUM(points) AS ts 
    FROM coupon 
    GROUP BY user_id
) c ON u.user_id=c.user_id 
LEFT JOIN 
(
    SELECT 
      user_id,
      SUM(points) AS bv 
     FROM matching 
     GROUP BY user_id
) r ON u.user_id = m.user_id 
where u.user_id="'.$_SESSION['user_name'].'"
GROUP BY u.user_id
于 2012-12-03T13:25:09.623 に答える
0

で派生テーブルに別名を付け、rそのテーブルを (2 回) で参照しますm。どちらか一方を修正します。

user_idあなたは2つのサブクエリでグループ化されており、 user_id(私が推測する) table の主キーであるuserため、実際には final は必要ありませんGROUP BY

すべての(多くの)ユーザーを対象とする場合、次のように記述します。

SELECT u.*, COALESCE(c.ts, 0) AS total_sum1, COALESCE(m.bv, 0) AS total_sum 
FROM users u 
LEFT JOIN 
 (SELECT user_id, SUM(points) AS ts FROM coupon GROUP BY user_id) c 
   ON u.user_id = c.user_id 
LEFT JOIN 
 (SELECT user_id, SUM(points) AS bv FROM matching GROUP BY user_id) m  
   ON u.user_id = m.user_id

あなたの(1人のユーザー)の場合は次のようになります:

SELECT u.*, COALESCE(c.ts, 0) AS total_sum1, COALESCE(m.bv, 0) AS total_sum 
FROM users u 
  LEFT JOIN 
     (SELECT SUM(points) AS ts FROM coupon
      WHERE user_id = "'.$_SESSION['user_name'].'") c 
    ON TRUE 
  LEFT JOIN 
     (SELECT SUM(points) AS bv FROM matching
      WHERE user_id = "'.$_SESSION['user_name'].'") m
   ON TRUE 
WHERE u.user_id = "'.$_SESSION['user_name'].'"

最後のクエリは、次のように簡略化することもできます。

SELECT u.*, 
     COALESCE( (SELECT SUM(points) FROM coupon 
                WHERE user_id = u.user_id)
             , 0) AS total_sum1,
     COALESCE( (SELECT SUM(points) FROM matching 
                WHERE user_id = u.user_id)
             , 0) AS total_sum 
FROM users u 
WHERE u.user_id = "'.$_SESSION['user_name'].'"
于 2012-12-03T13:31:37.540 に答える
0

m. を r に置き換えます。2番目の結合を見てください

于 2012-12-03T13:26:07.590 に答える