2013-02-14 3 views
0

잠시 동안 순수한 mySQL을 사용하지 않았으며 잊어 버렸습니다. 슬픈 이야기. 이제 2 개의 테이블 - 이미지와 득표가 있습니다. 이미지에는 고유 한 ID가 있습니다. 투표 테이블에는 이미지 ID와 사용자 ID의 두 필드 만 있습니다.MySQL - 투표로 이미지를 주문하십시오.

나는 투표 수순으로 정렬 된 이미지 목록을 얻으 려하고 있으며, 나는 여기에서 다소 붙어있다. 가장 가까운 것은 다음과 같습니다.

SELECT i.uname AS author, i.title, i.time, i.description, i.id, i.extension, v.uid 
FROM images as i 
LEFT JOIN 
votes as v ON i.id = v.iid 

그러면 투표자 ID가있는 모든 이미지가 반환됩니다. 이미지에 투표 수가 여러 번있는 경우 한 번 이상 반환됩니다.

누군가이 쿼리로 나를 도와 줄 수 있습니까?

답변

5

당신은 COUNTGROUP BY 사용해야합니다 제안으로

SELECT i.uname AS author, i.title, i.time, i.description, i.id, i.extension, COUNT(v.uid) 
FROM images as i 
    LEFT JOIN votes as v ON i.id = v.iid 
GROUP BY i.uname, i.title, i.time, i.description, i.id, i.extension 
ORDER BY Count(v.uid) DESC 

을, 당신은 GROUP BY에 MySQL은 모든 출력 필드가없는 - 다만이 경우, i.id에 고유 한 식별자를 사용 .

+2

+1, 그런데 왜 사용 그룹에 너무 많은 열? 'group by i.id' 만 사용하도록 제안하십시오. –

+0

@SuhelMeman - 모든 필드를 제공해야하는 SQL Server 배경에서 왔지만, 맞습니다. MySQL은 모두 필요하지 않습니다. 독특한 - 감사합니다! – sgeddes

+0

언제나 환영합니다. 원한다면 답변을 –

0

시도 :

SELECT i.uname AS author, i.title, i.time, i.description, i.id, i.extension, count(*) votes 
FROM images as i 
LEFT JOIN votes as v ON i.id = v.iid 
group by i.id 
order by 7 

(최저에서 최고에 - order by 7desc을 추가로 가장 높은에서 될 수있는 정렬 순서를 변경할 수 있습니다.)

관련 문제