1

where句内でselectを実行しようとしています。

基本的に、私には多くのユーザーがいて、どれがアクティブであるかを確認しようとしています。アクティブとは、過去30日間のアクティビティを記録したことを意味します。ただし、ユーザーテーブルをアクティビティテーブルと結合すると、重複するユーザーIDが取得されます(各ユーザーが複数のアクションをログに記録している可能性があるため)。

そのため、ユーザーごとに、少なくとも1つのアクションがあることを確認するselectを中に配置することを検討していました。

SELECT u FROM `users` u
where (
select count(*) FROM `user_activity` ua
where ua.user_id = u.user_id and ua.last_login between "2012-04-01 00:00:00" and "2012-04-30 23:59:59"
) >= 1
4

3 に答える 3

1
SELECT u
FROM users u
where EXISTS ( select null
               FROM user_activity ua
               where ua.user_id = u.user_id
                 and ua.last_login between "2012-04-01 00:00:00" and "2012-04-30 23:59:59" 
               LIMIT 1)

LIMIT 1パフォーマンスを少し改善する可能性のあるサブクエリについて指摘してくれた@Amiに感謝します

于 2012-05-03T22:18:21.067 に答える
0

はい、SELECT を WHERE 句に入れることができます。

JOIN を使用した相関サブクエリを避けて、パフォーマンスが向上するかどうかを確認します。

SELECT DISTINCT `user`
FROM users u
JOIN user_activity ua
  ON ua.user_id = u.user_id
  AND ua.last_login BETWEEN '2012-04-01 00:00:00' AND '2012-04-30 23:59:59'
于 2012-05-03T23:29:18.163 に答える
0

はい、次のように where 句内に select をネストできます。

SELECT * FROM mytable WHERE users in(SELECT users FROM  user_activity);

しかし、count(*) のような集計関数を where 句内にネストすることはできないと思います。したがって、最初にこれを試してから集計関数を試しますが、集計なしで選択を記述してみてください。目の前にあなたのデータがないので、そこを手伝うことはできません。

于 2012-05-03T22:23:27.803 に答える