2010-11-19 22 views
0

私はSQLの新機能を備えており、私の問題の解決策を見つけることができません。私は2つのテーブルを持っています。表Aでは、それぞれ固有のIDを持つ多くのコメントを保存しています。MySQL、別のテーブルで最も頻繁な値を持つ行を選択する必要があります

表Bでは、datetimeのすべてのコメントに対してすべての投票(= 1と嫌い= 0など)を保存しています。すべての投票のためのエントリーがあるので、テーブルAの各コメントにはたくさんの行があります。

私はすべてのコメントを取得し、週に一度好きなコメントが上になるように並べ替える必要があります私はどのようにか分からない。

は、ここで私がこれまで持っているものだが、ではない継続する方法がわから:

SELECT * FROM comment INNER JOIN logs ON comment.c_id=logs.c_id WHERE logs.daterate >= DATE_SUB(CURDATE(), INTERVAL 8 DAY) AND logs.rated=1 

を明確にするために、私は先週に定格= 1とログからすべてのエントリを取得し、最もによってそれらをソートする必要があります降順で頻繁にc_idを取得し、行ごとに異なるc_idを取得します。意味がある場合は

私は十分にはっきりしない場合は質問してください!

答えて

1
SELECT * 
     FROM comment 
INNER JOIN (SELECT comment.c_id, 
        COUNT(*) AS cnt 
       FROM comment 
     INNER JOIN logs ON comment.c_id=logs.c_id 
      WHERE logs.daterate >= DATE_SUB(CURDATE(), INTERVAL 8 DAY) 
       AND logs.rated=1 
      GROUP BY comment.c_id) x ON x.c_id = comment.c_id 
    ORDER BY x.cnt DESC 
+0

'FROM comment'の後の余分なカンマ – Unreason

+0

@Unreason:固定、ありがとう – zerkms

+0

素晴らしい、ありがとう! – Cody

-1

これを試してみてください -

は、私が最初に1を評価し、現在の日付から7日からであり、またC_IDの数に基づいて順序付けされているログテーブルからすべてのレコードを照会しています。次にこれをCOmmentsテーブルに結合しました。

SELECT Comment.* FROM comment C 
INNER JOIN (SELECT logs.c_id as c_id,count(logs.c_id) as logcount FROM logs 
WHERE logs.rated=1 
AND logs.daterate BETWEEN GETDATE() AND DATEADD(day,-7,getdate()) 
Group by logs.c_id 
order by count(logs.c_id) desc) X 

ON C.c_id = X.c_id 
ORDER BY X.logcount DESC 
+0

-1これは、SQLサーバーのMySQLないタグです。 'count()'は、標準準拠のSQL – Unreason

+0

で 'group by 'を必要とします。ありがとう。 – pavanred

関連する問題