0

私が持っている個別の値の行数を取得する簡単な方法があるかどうか疑問に思っています (悪い説明、私は知っています)

例: ブログ記事のビューを登録するテーブルがあります。記事 a と b を何回閲覧したかを数えたい (多数の記事があるので、最も閲覧された記事のトップ 10 を取得したい)

SQLでこれを取得する簡単な方法はありますか?現時点ではphp配列で行いました.配列内のすべての個別の行を取得しています.次に、配列値ごとに何行あるかを取得し、並べ替えます配列と最初の10をエコーし​​ますが、それはクエリが多すぎます。1つのクエリでこれを行う方法があるかどうか疑問に思っていましたか?

4

2 に答える 2

2
select
  a.article_id,
  a.title,
  a.date,

  /* Make sure to count a relevant view from the *views* table. 
  -- This makes sure that count returns 0 instead of 1 when
  -- the article isn't viewed yet. */
  count(v.article_id) as viewcount

from
  Article a

  /* Using left join here, to also include articles that are not viewed at all.
  -- You can change this to an inner join if you don't want to include those. */
  left join ArticleView v on v.article_id = a.article_id

group by
  /* Group by article id, so count() actually counts per article. */
  a.article_id

order by
  /* Place the best viewed articles on top. */
  count(v.article_id) desc

  /* And return only 10 articles at most. */
limit 10

このクエリは、ビューを持つ 10 件の記事がまったくない場合でも、10 件の記事を返します。実際にビューを持つ記事のみを返したい場合、および記事テーブルの他のフィールドは必要ない場合は、クエリを少し単純化できます。

select
  v.article_id,
  count(v.article_id) as viewcount
from
  ArticleView v
group by
  v.article_id
order by
  count(v.article_id) desc
limit 10

'a'ただし、最初のクエリの利点は、タイトルなどの他のフィールドをクエリ結果に追加できることです。したがって、この 1 つのクエリで実際にトップ 10 リスト全体を生成するために必要なすべての情報を返すことができますが、2 番目のクエリは ID のリストのみを提供します。

于 2013-10-07T20:57:32.077 に答える
1

SQL グループ化を使用すると簡単に実行できます。

select articleid, count(*) from view_table group by articled

明らかに、テーブルとフィールドを変更する必要があります。

于 2013-10-07T20:57:37.943 に答える