1

これは、stackoverflow に関する私の最初の投稿ですが、長い間参照として使用してきました。ですから、これまで私に提供してくださったすべてのガイダンスに感謝します。ほんとうにありがとう。これが私の問題です:

2 つのテーブルがあり、1 つは呼び出されUSERS、もう 1 つは呼び出されますSIGNIN

USERS  
-----------------
userid | password

SIGNIN
--------------
suserid | date

先週の期間中にユーザーがサインインした回数を数えたいと思います。

これが私が持っているものです:

SELECT userid, password FROM USERS JOIN (SELECT suserid, COUNT(*) AS logins 
FROM signin 
WHERE WEEKOFYEAR(date) = WEEKOFYEAR(CURDATE()) && signin.suserid = users.userid) 
GROUP BY userid

サブクエリの方法に頭をJOIN悩ませて、各個人のログイン(日付列)をカウントし、各個人の個別の番号を返すようにすることはできません。クエリが完全にジャッキアップされていることはわかっていますが、私はちょうどその時点で、非常に混乱しているので、ガイダンスが必要です.

どんな助けと指示も素晴らしいでしょう!何ページ読んでも無駄だった。前もって感謝します!

**編集していただきありがとうございます。将来また投稿するときに役立ちます。

4

4 に答える 4

2

サブクエリを実行しようとしないでください。結合を実行して、ユーザー ID でグループ化してください。また、YEARWEEK が必要なため、任意の年の週だけでなく、年と週の両方が一致します。

select userid, count(*)
    from users inner join signin on userid=suserid and yearweek(`date`) = yearweek(curdate())
    group by userid;

サインインしていないユーザーに対して0の結果が必要な場合は、内部結合ではなく左結合を使用します。これは、現在の日付の週を意味する「先週」の意図であると私が想定するものに従いますオプションの mode パラメータを yearweek に)。

ここの users テーブルは完全にオプションであることに注意してください。あなたはただすることができます:

select suserid, count(*) from signin
    where yearweek(`date`) = yearweek(curdate())
    group by suserid;

しかし、ユーザーから他の列を取得しているか、削除されたユーザーのサインインを除外したい可能性があると思います。

于 2013-01-06T22:09:08.847 に答える
0

私があなたを正しく理解していれば、サブクエリは必要ありません。

何かのようなもの:

SELECT a.userid, a.password, count(b.date) AS logins
FROM users a
INNER JOIN signin b ON a.userid = b.suserid  and WEEKOFYEAR(date) = WEEKOFYEAR(CURDATE())
GROUP BY a.userid, a.password

申し訳ありませんが、構文を再確認するためにクエリを試す時間はありませんが、正しい方向に進むことを願っています

編集: ログインが 0 のユーザーを含めたい場合は、LEFT OUTER JOIN に変更します

于 2013-01-06T22:05:45.800 に答える
0

ここに参加する必要はありません。あなたが必要とするものは

SELECT userid, password, (SELECT COUNT(*) 
FROM SIGNIN
WHERE WEEKOFYEAR(date) = WEEKOFYEAR(CURDATE()) AND signin.suserid = users.userid) AS logins
FROM USERS WHERE 1 GROUP BY userid;
于 2013-01-06T22:06:57.390 に答える
0

sこれはそれであるべきです:

select suserid, count(suserid)
    from signin
    where date > NOW() - INTERVAL 1 WEEK
    group by suserid;
于 2013-01-06T22:02:33.300 に答える