2015-01-13 2 views
0

I가 3 표MySQL의 - 표시 합

표 뉴스에 참여하기로 :

id_post | news  | id_user 
3  | IT news | 1 
4  | game news | 2 

표 사용자 :

id_user | username 
    1 | bocah 
    2 | gundul 
    3 | ganteng 

그리고 표 투표

id_vote | id_post | id_user | LIKE 
10  | 3  | 2  | 1 
11  | 3  | 3  | 1 
12  | 3  | 1  | 1 

그리고이 내 SQL 쿼리 :

SELECT id_vote, u.id, username, SUM(v.like) AS like FROM vote v 
LEFT JOIN user u ON v.id_user=u.id 
LEFT JOIN post p ON v.id_post=p.id_post 
WHERE YEARWEEK(p.time)=YEARWEEK(NOW()) 
GROUP BY u.id ORDER BY like DESC LIMIT 4 

뉴스가 현재 주에있는 것과 같은 상위 사용자 기반 합계를 표시하려고합니다. 내 기대 사용자 1에서 보카는 LIKE을 표시합니다. 그리고 문제는 사용자 1, bocah는 1 개의 LIKE만을 수신합니다.

답변?

+0

당신이/P O 예상을 보일 수 있는가? –

+0

출력은 다음과 같아야합니다 : username bocah LIKE 3 –

+0

어쨌든 여기 id_user 1은 1보다 더 좋아 보이지 않습니다. 그러면 어떻게 그걸 좋아할 것입니까 3 –

답변

0

다음 쿼리를 사용해보십시오. 귀하의 기대에 따라 작동해야합니다.

SELECT u.id_user, u.username, SUM(v.like) AS like 
FROM USER u 
LEFT JOIN news n ON u.id_user=n.id_user 
LEFT JOIN vote v ON v.id_post=n.id_post 
WHERE YEARWEEK(v.time)=YEARWEEK(NOW()) 
GROUP BY u.id_user 
+0

투표에 시간이 없다, 시간은 게시물에만 있지만 대답에 대한 감사, 나는 이것을 받아 들인다. –

0

투표 테이블에서 id_user 열을 제거하십시오. (충돌, 당신은 투표 테이블에 사용자 2에 대한 다른 게시물을 게재하고 있습니다.) 다음이 쿼리를 만들어, 나는 그것이 도움이 될 것 같아요.

select sum(`likes`) as `Like`, user.user_id , user.id_user from vote v 
LEFT JOIN news n ON v.id_post=n.id_post 
LEFT JOIN user u ON n.id_user=u.id_user 
where <your time condition> 
group by v.id_post 
order by `like` desc limit 4 
0

이 시도 :

나는 테이블에서 볼 수있는에서
SELECT 
    n.*, 
    u.`username`, 
    (SELECT SUM(`like`) FROM vote WHERE id_post = n.`id_post`) AS likes 
FROM news n 
INNER JOIN `user` u ON u.`id_user` = n.`id_user` 
WHERE YEARWEEK(n.time)=YEARWEEK(NOW()) 
ORDER BY likes DESC LIMIT 4; 

, 당신은 뉴스 포스트 당 최고 투표를 잘 좋아 싶어? datetime 필드가 뉴스 테이블에 있다고 가정하거나 투표가 완료되었을 때입니까?

결과 :

 
id_post |news  |id_user | username | likes 

            
 
3 | IT News |1 | gandul |3 4 |game news |2 | bocah |(NULL)