Ok, więc mam 2 tabele:SQL dołączyć do jednego do wielu relacji - policzyć liczbę głosów na obraz?
images votes
---------------------------- --------------------
image_id | name | square_id vote_id | image_id
---------------------------- --------------------
1 someImg 14 1 45
2 newImg 3 2 18
3 blandImg 76 3 1
... ...
n n
Jest to jeden do wielu relacji. Każdy obraz może mieć wiele głosów, ale głos może być powiązany tylko z jednym obrazem. Próbuję utworzyć zapytanie dołączenia, które wyświetli identyfikator obrazu i liczbę głosów, które ma pod określonym warunkiem (np. Na podstawie square_id
). Zatem wynik zapytania będzie wyglądał podobnie do tego:
query_result
----------------------
image_id | vote_count
----------------------
18 46
26 32
20 18
...
55 1
Ale najlepsze, co mogę zrobić, to w ten sposób:
query_result
----------------------
image_id | vote_id
----------------------
18 46
18 45
18 127
26 66
26 43
55 1
widzi ten problem? Każdy image_id
jest wymieniony wiele razy dla każdego z nich, vote_id
. To jest kwerenda, która produkuje to:
SELECT images.image_id, votes.vote_id
FROM votes JOIN images ON images.image_id=votes.image_id
po prostu nie może wydawać się utworzyć kolumnę vote_count
która jest sumą wszystkich głosów, że obraz ma. Czy jest jakiś sposób, że mogę użyć funkcji count()
, aby to zrobić, o czym po prostu nie jestem świadomy?
Wow! Działa to ... idealnie! Gdzie jest magia? Czy funkcja GROUP BY przyjmuje relację jeden-do-wielu i przekształca ją w relację jeden-do-jednego? – ReactingToAngularVues
@Antilogical - Nie chodzi o typ statku relacji, chodzi o grupę, tutaj "GROUP BY" tworzy listę różnych wartości 'image_id', a następnie dla drugiej kolumny' vote_id' używa funkcji agregującej, czyli 'COUNT', który zlicza głosy dla każdego zgrupowanego' image_id'. –
Dzięki za pomoc! – ReactingToAngularVues