2017-02-12 7 views
0

したがって、2つのテーブルreleaseとrelease_favouritesがあります。別の値でSQLの順序と制限を行う

リリース構造:

id date (timestamp) other data 
    1  1486901083   ... 
    2  1486909903   ... 
    .... 

release_favourites構造:

id releaseId userId 
    1  2   5 
    2  2   10 
    .... 

私は日付によってレコードを注文したいが、私はほとんどの持つ唯一の10件のレコードをしたい(あなたはSQLで見ることができるようではない問題)お気に入りは、それは可能ですか?

は(作品以下のSQLが、唯一の日付で注文するための)

SELECT [some rows] 
FROM release AS a, release_favourites AS b 
WHERE a.id = b.releaseId 
ORDER BY a.date 
+0

(1)使用しているデータベースであなたの質問にタグを付けます。 (2)*決して* FROM句でカンマを使用しないでください。 *常に*適切で明示的な 'JOIN'構文を使用します。 (3)質問を編集し、希望の結果を表示します。 –

+0

@GordonLinoffどうして '[table] AS a'を使わないのですか? – nacelnikpohodar

答えて

0
SELECT DISTINCT [some rows] 
FROM release 
WHERE id IN (
     SELECT releaseId 
     FROM (
       SELECT releaseId 
       FROM release_favourite 
       GROUP BY releaseId 
       ORDER BY count(*) 
       DESC LIMIT 10 
     ) 
     AS tmp 
) 
ORDER BY date 
0

あなたの説明から、あなたはGROUP BYをしたいです。 1つのテーブルのみを表示します(クエリには2つあります)。これは、(合理的)あなたが望むものに推測:

select rf.release_id 
from release_favourites rf 
group by rf.release_id 
order by count(*) desc 
fetch first 10 rows only; 

あなたが実際には別のテーブルから好きな分野に参加(またはinまたはexistsを使用)することができます。すべてのデータベースがANSI標準fetch first 10 rows only構文をサポートしているわけではありません。しかし、すべての結果セットを与えられた行数に制限する何らかの方法があります。

1
select  * 

from  release 

where  id in 
      (
       select  releaseid 
       from  release_favourites 
       group by releaseid 
       order by count(*) desc 
       limit  10 
      ) 

order by date 
+0

これは動作しますが、サブクエリでは制限を使用できません: 'MariaDBのこのバージョンはまだ 'LIMIT&IN/ALL/ANY/SOMEサブクエリ'をサポートしていません。 – nacelnikpohodar

+0

@nacelnikpohodar 。 。 Duduに違反することはありませんが、なぜあなたは答えを受け入れて、それがうまくいかないとコメントしますか? –

+0

@ GordonLinoff - 非撮影、同じ考え。 –

関連する問題