0

まず、SQLが苦手なので優しくしてください;)

だから私は2つのテーブルを持っています:

見る:

  • id_view
  • 日にち
  • IP
  • id_記事

論文

  • id_記事
  • id_user
  • 日にち
  • ...その他のもの...

私が欲しいのは、ビュー数が多い 3 つの記事の数と詳細を取得することです。

私が成功せずに試したステートメントは次のとおりです。

SELECT COUNT(DISTINCT view.id_article)
, view.id_article
, article.date category_name 
FROM view , article 
WHERE view.id_article=article.id_article 
AND article.date="2013-10-18" 
GROUP BY id_article LIMIT 3

しかし、その日の 1 つの記事の結果しか表示されないため、本当に必要な結果が得られません。つまり、記事 1 がその日に 1 回閲覧されたことはわかっていますが、その特定の日に閲覧された別の記事があります。

それは本当に簡単なことだと思いますが、自分で理解できます... :/

前もって感謝します。

編集:

答えを見つけました:

SELECT COUNT(view.id_article), view.id_article 
FROM view , article 
WHERE view.id_article = article.id_article 
  AND view.date = "2013-10-18" 
GROUP BY id_article
LIMIT 3
4

3 に答える 3

0

これが役立つと思います:

select * from article where article_id in 
(
       select article_id from
       (
            select count(*) as a, article_id
            from view
            where date = '[Pass your date here]'
            group by article_id
            order by a desc
            limit 3
       ) as C
)

このコードの欠点は、ビュー数に基づいて記事の降順を維持できないことです。

于 2013-10-18T17:58:30.397 に答える
0

あなたの質問に正しく答えているかどうかはまだわかりません...しかし、ここに行きます。

select a.id_article, count(1)
from article a inner join view v on v.id_article=a.id_article 
where v.date="2013-10-18" 
group by a.id_article
order by count(1) desc
limit 3

これにより、where 句で指定された日付に最も閲覧された 3 つの記事の id_article が得られます。これがあなたが望んでいたものであることを願っています...

スクリプトを投稿するだけで、ビューと日付は予約語です。列またはテーブル名として使用しないことをお勧めします。

于 2013-10-18T17:50:12.300 に答える
0

これを試して

SELECT a.*, g.count
FROM
(SELECT COUNT(1) as count , id_article
FROM view
WHERE date = "2013-10-18"
GROUP BY id_article ) g
INNER JOIN article a ON a.id_article = g.id_article
ORDER BY g.count DESC LIMIT 3

SQL フィドルのデモ

于 2013-10-18T18:01:09.217 に答える