2

私はこのような3つのテーブルを持っています:

マンガ

|   id  | sendby
------------------
|   1   |   1
|   2   |   1
|   3   |   1
|   4   |   1

チャプラー

|   id  | sendby    | translator | graphic
-------------------------------------------
|   1   |   1       |   admin    |  other
|   2   |   1       |   admin    |  other
|   3   |   1       |   admin    |  admin
|   4   |   1       |   other    |  admin

ユーザー

|   userid  | username  
-----------------------
|      1    |   admin       

これまでに送信したものをカウントしようとしていますが、結果が正しくありません。

以下のクエリを試しました:

SELECT username,
   SUM(
       CASE WHEN m.sendby = u.userid
       THEN 1 ELSE 0 END
   ) AS manga,
   SUM(
       CASE WHEN c.sendby = u.userid
       THEN 1 ELSE 0 END
   ) AS chapter,
   SUM(
       CASE WHEN c.translator = u.username
       THEN 1 ELSE 0 END
   ) AS translator,
   SUM(
       CASE WHEN c.graphic = u.username
       THEN 1 ELSE 0 END
   ) AS graphic
FROM user u
    left JOIN manga m 
        ON m.sendby = u.userid 
    left JOIN chapter c 
        ON c.sendby = u.userid 
where u.userid = '1'

しかし、これは正しくありません。

マンガ : 16、チャプター : 16、翻訳者 : 12、グラフィック : 8

4

3 に答える 3

2

これがこれに対するクエリです

select
  m.id,
  count(m.sendby) as Manga,
  lc.Chapter,
  rc.Translater,
  c.Grafix
from manga as m
  left join (select sendby, count(sendby) as Chapter from chaprer) as lc on lc.sendby  = m.sendby
  left join (select sendby, count(translater) as Translater from chaprer where translater = 'admin') as rc on rc.sendby  = m.sendby
  left join (select sendby, count(graphics) as Grafix from chaprer where translater = 'admin') as c on c.sendby  = m.sendby

編集
私はこのクエリをテストしましたが、これはこの結果を取得します

Query Result
id  Manga   Chapter Translater  Grafix
1   4       4       3           3 
于 2012-08-12T13:27:39.683 に答える
1

left JOIN意図的に使った?それがどのように機能するか知っていますか?それを2回使用すると、16行の結果テーブルで選択が実行されました。最初にすべての結果 (*) を選択してから、FROM句を修正して、選択する目的のデータを返すようにしてください。

あなたのコメントから、あなたはInner joinを使用するように思われます。

于 2012-08-12T13:23:09.917 に答える
0

簡単なアプローチは、次のようなことを行うことです。

SELECT  username,
(SELECT COUNT(m.sendby) FROM manga m WHERE m.sendby= u.userid) AS manga,
(SELECT COUNT(c.sendby) FROM chapter c WHERE c.sendby= u.userid) AS chapter,
(SELECT COUNT(t.sendby) FROM chapter t WHERE t.translator= u.username) AS translator,
(SELECT COUNT(g.sendby) FROM chapter g WHERE g.graphic= u.username) AS graphic
FROM USER u
WHERE userid=1

次のコマンドを実行すると、元のクエリに問題が表示されます。

SELECT *
FROM USER u
    LEFT JOIN manga m 
        ON m.sendby = u.userid 
    LEFT JOIN chapter c 
        ON c.sendby = u.userid 
WHERE u.userid = '1'

左結合は重複行を返しています。

于 2012-08-12T14:40:17.503 に答える