2012-03-28 2 views
0

사용자가 게시 한 기사가 포함 된 표가 있습니다. 테이블의 구조는 다음과 같다 :이 기사의보기 수에 따라 특정 사용자의 기사를 표시하려면 어떻게해야합니까?

id  uid  author  article_name  article  num_views  edit_time 

id이 자료이며, uid 저자 ID입니다 및 num_views이 문서가보고있는 횟수입니다.

은 내가 필요한 것은 uidauthor idarticle id 경우 내가 필요한 것은 같은 것을 표시하는 것입니다, 5입니다, 짧은에서 uid

에 따라 만 가장 많이 본 기사를 표시하는 것입니다 :

id  uid  article_name  num_views 
5  1  article title  100 

MySQL에서 쿼리하지만 그것을 알아낼 수 없었다, 아무도 제발 도와 줄 수 ??

+1

try'SELECT id, uid, article_name, num_views 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

많이 본 기사와 각 사용자의 수 : 오직 주어진 UID 당신이 명령 BY ORDER으로 쿼리를 정렬 시도해야 한 항목 만 필요한 경우

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

@wfareed 하나의 uid에 대해서만 필요합니까? – safarov

1

를 들어

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

LIMIT 1 명령으로 한 기사로 제한하십시오. 문서의

SELECT * WHERE 가장 전망 기사를 선택해야 NUM_VIEWS DESC의 LIMIT 1

BY (일부 기준) ORDER.

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 필드.

또 다른 방법은 하위 쿼리와 조인 사용하는 것입니다 만,이 뷰 같은 가장 많은 동일한 사용자에 대한 두 개의 기사를, 그리고 또한 성능 문제가있는 경우 그것은 이상한 될 수 있습니다

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

관련 문제