2012-03-28 9 views
0

ユーザーが投稿した記事を含む表があります。テーブルの構造は次のようである:この記事の閲覧回数に応じて特定のユーザーの記事を表示するにはどうすればよいですか?

id  uid  author  article_name  article  num_views  edit_time 

id文書番号で、uidは、著者IDであるとnum_viewsは、この記事が表示されている回数です。私は必要なもの

uidauthor idarticle idであれば、要するにuid

に応じONLY最も見られた記事を表示することです、私は必要なもの、5であるようなものを表示することです:

id  uid  article_name  num_views 
5  1  article title  100 

私はいくつかMySQLのクエリが、私はそれを把握することができなかった、誰も助けてくれる??

+1

try 'SELECT id、uid、article_name、num_views ORDER BY num_views DESC LIMIT 1' – Yaniro

+2

あなたのサンプルの結果で 'uid'が2であってはいけませんか? –

+0

ELECT id、uid、article_name、num_views WHERE 'uid' = '1' ORDER BY num_views DESC LIMIT 1、これはちょうど私が必要としていることをやってくれました、ありがとう:) – wfareed

答えて

2

各ユーザが最も見られた記事とその回数:

SELECT `id`, `uid`, `article_name`, `num_views` 
FROM `table` 
WHERE `num_views` IN ( 
    SELECT MAX(`num_views`) FROM table GROUP BY `uid`) 

のみ与えられたuid

SELECT `id`, `article_name`, MAX(`num_views`) 
FROM `table` 
WHERE `uid` = <user id> 
+1

' id'と 'article_name'そこでmax(num_views)の行と一致します。 – KernelM

+0

このクエリは間違ったID(記事ID)を返していて、特定のUIDに基づいて選択していません。 – wfareed

+0

あなたは1つのuidだけ必要ですか? – safarov

1

のために一つだけのエントリが必要な場合は、コマンド、ORDER BYを使用してクエリをソートするために試してみてくださいLIMIT 1コマンドで1つの記事に限定します。ほとんどのビューで記事を選択する必要がありNUM_VIEWS DESCのLIMIT BY(いくつかの基準)ORDER 1.

資料から

SELECT *。

1

それは少しハックだし、あなたのテーブルには、大きな得れば、それは非パフォーマンスになるだろうが、これを行うための一つの方法は、次のようになります。

select uid, 
group_concat(id order by num_views desc) as most_viewed_id, 
group_concat(article_name order by num_views desc) as most_viewed_name, 
group_concat(num_views order by num_views desc) as num_views 
from yourtable group by uid 

あなたは、その後の最初の要素を解析する必要がありますそれぞれのgroup_concat'dフィールド。

もう一つの方法は、サブクエリでの参加を用いることであろうが、ビューの同じ数が最も多い同じユーザのための2つの記事があります場合は、それは奇妙なことができ、また、パフォーマンスの問題があります。

select uid,num_views,id,article,article_name from 
yourtable join 
(select uid,max(num_views) as maxviews from yourtable group by uid) as subtable 
using (uid,num_views) 

もちろん、ある時点では、uidを単純な順序でクエリーで反復するのが最善の方法です。それはより多くのクエリですが、データに応じてより速くなる可能性があります。残念ながら、SQLは実際にこのようなクエリを行うように設定されていません。

+0

とにかく:) – wfareed

関連する問題