2

私はそのようなスキーマとクエリを持っています: http ://sqlfiddle.com/#!2 / 7b032 / 3

これとは別に、次のクエリがあります。

SELECT COUNT(*) AS 'times', userid, name
FROM main
WHERE comedate <= DATE_SUB(CURDATE(),
                   INTERVAL 5 DAY)
GROUP BY userid ORDER BY times DESC LIMIT 0,2;

SELECT * FROM details WHERE 1;

両方のテーブルのユーザーID列を比較することにより、それらを結合する必要があります。
次の列を持つ出力が必要です:
" times, userid, name, age, location"
また、順序、グループ、および制限を考慮する必要があります。

JOINを使用して1つのクエリを記述し、サブクエリを使用して1つのクエリを記述できれば幸いです。
私は60kのテーブルを持っており、パフォーマンスを比較します。

4

1 に答える 1

1

これはどう:

select x.times,
  x.userid,
  x.name,
  d.age,
  d.location
from 
(
  SELECT COUNT(*) AS 'times', userid, name
  FROM main
  WHERE comedate <= DATE_SUB(CURDATE(),
                     INTERVAL 5 DAY)
  GROUP BY userid 
) x
left join details d
  on x.userid = d.userid

SQL FiddlewithDemoを参照してください

編集:

select x.times,
  x.userid,
  x.name,
  d.age,
  d.location
from 
(
  SELECT COUNT(*) AS 'times', userid, name
  FROM main
  WHERE comedate <= DATE_SUB(CURDATE(),
                     INTERVAL 5 DAY)
  GROUP BY userid
  ORDER BY times DESC 
  LIMIT 0,2
) x
left join details d
  on x.userid = d.userid

デモ付きのSQLフィドルを参照してください

于 2012-09-12T19:26:31.460 に答える