MySQL - Group in Count 2 tabeli
4 naročniki
4 naročniki
Kdo mi lahko prosim pomaga...
Imam dve tabeli, ki imata skupno vrstico slikaid:
Tabela: ocene (rows: slikaid, 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: slikaid, ocena)
takole
Tabela: ocene (rows: slikaid, ocena)
Tabela: komentarji (rows: slikaid, komentar)
Žal ne pride točno. Mogoče sem jaz zgoraj malo zaf... ko sem napisal tole:
Tabela: ocene (rows: slikaid, ocena)
Tabela: komentarji (rows: slikaid, ocena)
Moralo bi biti:
Tabela: ocene (rows: slikaid, ocena)
Tabela: komentarji (rows: slikaid, 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 slikaid = 1651
) tablica
GROUP BY ocena
ORDER BY ocena
Opcija z enim SQL-om. Osebno bi raje uporabil Gogyjevo rešitev (2 poizvedbi + merge)
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 :)