MySQL - Group in Count 2 tabeli

Kdo mi lahko prosim pomaga...

Imam dve tabeli, ki imata skupno vrstico slikaid:
Tabela: ocene (rows: slika
id, ocena)
Tabela: komentarji (rows: slika_id, ocena)

Kako bi lahko združil te dve tabeli za eno sliko (recimo slika_id = 1651), da bi ven dobil vse dane ocene od 1 - 5 za to sliko in kjer poleg bi pisalo število prejetih ocen (count).

Primer rezultata:
1 (ocena) - 0 (št. glasov) - ta se seveda ne izpiše, ker nobeden ni dal ocene 1
2 (ocena) - 12 (št. glasov)
3 (ocena) - 5 (št. glasov)
4 (ocena) - 4 (št. glasov)
5 (ocena) - 0 (št. glasov) - ta se seveda ne izpiše, ker nobeden ni dal ocene 5

10 odgovorov

select oc.ocena, count(*)
from ocene oc, komentarji ko
where oc.slika_id=ko.slika_id
and oc.slika_id=1651
group by oc.ocena
order by oc.ocena asc

probaj, to sem napisal na pamet na hitro

Pa verjetno je tukaj namesto
Tabela: ocene (rows: slikaid, ocena)
Tabela: komentarji (rows: slika
id, ocena)

takole
Tabela: ocene (rows: slikaid, ocena)
Tabela: komentarji (rows: slika
id, komentar)

1

Žal ne pride točno. Mogoče sem jaz zgoraj malo zaf... ko sem napisal tole:
Tabela: ocene (rows: slikaid, ocena)
Tabela: komentarji (rows: slika
id, ocena)

Moralo bi biti:
Tabela: ocene (rows: slikaid, ocena)
Tabela: komentarji (rows: slika
id, ratings, komentar)

Sicer ne vem ali bo to kaj spremenilo tvoj sql stavek.

Thx za pomoč ;)

Pomoje bi to moralo delovati, čeprav bi jaz zaradi volje sintakse raje dal count(ocena) :)

Hja glede na tvoj zadnji komentar se moreš odločit kje so ocene :) V ocena ali v ratings, glede na to moreš seveda tudi preštet zadeve glede na to:)

Če je število ocen v ocena potem šteješ ocena ampak prikazuješ pa ratings

select ratings,count(ocena)
from ocene oc, komentarji ko
where oc.slikaid=ko.slikaid
and oc.slika_id=1651
group by ratings
order by ratingsasc

Žal ne Tody, za to fotografijo mi pride rezultat: 363 namesto 44

http://www.slo-foto.net/galerija_slika-94469.html&filter=high

EDIT na tvoj zadnji odgovor:
Ocene se po starem sistemu nahajajo v tabeli komentarji (ratings), v novem sistemu pa v tabeli ocene (row ocena). Jaz pa bi jih želel združiti skupaj.

A so tukaj komentarji potem sploh pomembni?

TI želiš ocene, koliko jih je in koliko je katerih?

select ocena, count(*)
from ocene
where slika_id=1651
group by ocena
order by ocena asc

Komentarji niso pomembni, zaradi tega jih tudi nisem omenil v prvem postu. Ampak vsebujejo pa po starem sistemu ocene.

Jaz želim, zaradi spremembe sistema, združiti ocene iz ene tabele z drugo tabelo in prikazati koliko jih je ter katere so.

Če ne dobiš nobenega konkretnega odgovora bi jaz to rešil kar s PHP-jem (če delaš z njim) in pač narediš kak query več in s pomočjo kakih array-ev narediš merge.

Ni profi, bi bilo pa za silo.

SELECT ocena, count(ocena)
FROM
(
SELECT ocena FROM ocene WHERE slikaid = 1651
UNION ALL
SELECT ocena FROM komentarji WHERE slika
id = 1651
) tablica
GROUP BY ocena
ORDER BY ocena

Opcija z enim SQL-om. Osebno bi raje uporabil Gogyjevo rešitev (2 poizvedbi + merge)

4

Hehehe, sem vedel da je simple rešitev, pa sem izumljal toplo vodo :)

Jaz bi kar tole uporabil, samo da bi pri drugem select uporabil ratings namesto ocena :)

Sicer sem včeraj že naredil podobno kot je povedal Gogy, ampak Simon je dal še boljšo rešitev. Hvala vsem za pomoč!