2017-02-28 3 views
1

Hier habe ich TabellenSumme() gibt falschen Wert mit beitreten

1) users_interests

user_id interest_id 
677  12 
677  14 
677  13 

2) answer_points

user_id in_id point 
677  12  -1 
677  12  1 
677  12  1 
677  14  1 
678  14  1 

3) Interessen

id name 
12 movie 
13 cooking 
14 music 

hier, was ich tun möchte, ist, möchte ich eine Ausgabe wie diese

interest_id name point 
12    movie 1 
13    cooking 0 
14    music 1 

Wo user_id=677

ich diese Abfrage versucht

select ui.interest_id,i.name,sum(a.answer_points) as total from 
users_interests as ui inner join interests as i on i.id=ui.interest_id 
left join answer_points as a on a.in_id=ui.interest_id 
where i.user_id='677' group by a.in_id 

Aber nicht 1 Stimmenauszählung. es gibt 3 total für Film

Antwort

1

check this Dieser Code wird für Ihre Anforderung arbeiten, auch unter Link

http://rextester.com/NQXE66482

SELECT 
J.interest_id AS 'ID', 
I.NAME AS 'NAME', 
CASE WHEN K.TOTAL != 0 THEN K.TOTAL 
ELSE 0 END AS 'Total' 
FROM 
users_interests AS J 
JOIN 
interests AS I 
ON 
J.interest_id = I.id 
LEFT JOIN 
(SELECT 
a.id AS 'ID', 
a.name AS 'NAME', 
SUM(b.point) as 'TOTAL' 
FROM 
interests a 
LEFT JOIN 
answer_points b 
ON a.id = b.in_id 
WHERE user_id = 677 
GROUP BY 1) AS K 
ON 
J.interest_id = K.id 
WHERE 
J.user_id = 677 
GROUP BY 1 
ORDER BY 1 
+0

ich bekomme sehr unterschiedliche ergebnis die ihre http://prntscr.com/eedmh4 – hemsbhardiya

+0

Ich habe den Code aktualisiert, Es sollte jetzt funktionieren. Grundsätzlich müssen Sie nach 1 –

+0

fast schließen, aber es gibt 9 Zeilen zurück http://prntscr.com/eedsg2 sollte es nur 3 – hemsbhardiya

0

Sie sollten linken Seite registrieren Interessen

select i.id, sum(a.point) 
from interests as i 
left users_interests as ui on ui.interest_id = i.id 
left join answer_points as a on a.user_id = ui.user_id and a.in_id = i.interest_id 
where i.user_id=677 
group by a.id 
+0

Interessen Tabelle keine interest_id und User_id hat. also denke ich, dass ich einige Felder korrigieren muss. Kannst du die Antwort erneut posten? – hemsbhardiya

+0

antwort aktualisiert .. – scaisEdge

1

versuchen, diese

select id,name,coalesce(find_in_set(id,in_id),0) as points 
from interests i 
left join(select distinct in_id 
from answer_points a where point = 1)a 
on a.in_id = i.id cross join users_interest u 
where u.user_id = 677 group by id; 
0

Start musste ich einfach JOIN wenig wie dies ändern,

select ui.interest_id, i.name, COALESCE(SUM(a.answer_points),0) as total from users_interests as ui 
join interests as i on i.id = ui.interest_id 
left join answer_points as a on a.in_id = ui.interest_id AND a.user_id = ui.user_id 
where ui.user_id='677' 
group by a.in_id 

Ich musste user_id ebenso invergleichenwie diese AND a.user_id = ui.user_id

Verwandte Themen