wielokrotne sortowanie
csh - 31-08-2007 00:13
wielokrotne sortowanie
Witam
Czy jest mozliwosc posortowania wyniku gdy wykonalismy juz LIMIT ? przyklad jaki mnie interesuje:
SELECT tag, COUNT(*) as count FROM video_tags GROUP BY tag ORDER BY count DESC LIMIT 30
teraz rekordy jakie otrzymam beda posortowane od najwiekszego, czy jest mozliwosc posortowania tego wyniku (juz po wykonaniu LIMIT 30) w sposob podobny do ORDER BY RAND() ?
I drugie pytanie: Tworze sobie wlasnie system tagow, mam taka tabelke: video_id | tag | Aby wykonac chumre tagow chce pobierac najpopularniejsze tagi z wybranej kategorii. I tu pojawia sie moje pytanie, bowiem naskrobalem cos takiego:
SELECT video_tags.tag, COUNT(*) AS count FROM video_tags INNER JOIN videos ON videos.id = video_tags.video_id AND videos.cat_id = _jakas_kategoria_ GROUP BY video_tags.tag ORDER BY count DESC LIMIT 20
wydaje sie ze dziala, poza sortowaniem ktore chcialbym uzyskac i o ktorym pisalem wczesniej, ale jak to sie ma wydajnosciowo? Czy przy sporej bazie takie zapytanie nie jest zbyt kosztowne ? Moze lepiej do tabelki z tagami dodac pole cat_id i tam jeszcze raz zapisywac id kategorii ?
Bede wdzieczny za kazda pomoc Pozdrawiam
csh - 31-08-2007 00:14
On 30 Sie, 20:49, csh <c-...@o2.pl> wrote: > Witam > > Czy jest mozliwosc posortowania wyniku gdy wykonalismy juz LIMIT ? > przyklad jaki mnie interesuje: > > SELECT tag, COUNT(*) as count FROM video_tags GROUP BY tag ORDER BY > count DESC LIMIT 30 > > teraz rekordy jakie otrzymam beda posortowane od najwiekszego, czy > jest mozliwosc posortowania tego wyniku (juz po wykonaniu LIMIT 30) w > sposob podobny do ORDER BY RAND() ? > > I drugie pytanie: > Tworze sobie wlasnie system tagow, mam taka tabelke: > video_id | tag | > Aby wykonac chumre tagow chce pobierac najpopularniejsze tagi z > wybranej kategorii. I tu pojawia sie moje pytanie, bowiem naskrobalem > cos takiego: > > SELECT video_tags.tag, COUNT(*) AS count FROM video_tags INNER JOIN > videos ON videos.id = video_tags.video_id AND videos.cat_id = > _jakas_kategoria_ GROUP BY video_tags.tag ORDER BY count DESC LIMIT 20 > > wydaje sie ze dziala, poza sortowaniem ktore chcialbym uzyskac i o > ktorym pisalem wczesniej, ale jak to sie ma wydajnosciowo? Czy przy > sporej bazie takie zapytanie nie jest zbyt kosztowne ? Moze lepiej do > tabelki z tagami dodac pole cat_id i tam jeszcze raz zapisywac id > kategorii ? > > Bede wdzieczny za kazda pomoc > Pozdrawiam
Ok, pierwszy problem rozwiazalem tak: SELECT * FROM (SELECT t.tag, COUNT(*) AS count FROM video_tags AS t INNER JOIN videos AS v ON v.id = t.video_id AND v.cat_id = 2 GROUP BY t.tag ORDER BY count DESC LIMIT 20) AS tags ORDER BY RAND() Czy to jedyny sposob ?
Aktualne pozostaje dalej pytanie drugie
Pozdrawiam
Herakles - 01-09-2007 00:16
> Ok, pierwszy problem rozwiazalem tak: > SELECT * FROM (SELECT t.tag, COUNT(*) AS count FROM video_tags AS t > INNER JOIN videos AS v ON v.id = t.video_id AND v.cat_id = 2 GROUP BY > t.tag ORDER BY count DESC LIMIT 20) AS tags ORDER BY RAND() > Czy to jedyny sposob ? > > Aktualne pozostaje dalej pytanie drugie Jeśli sortujesz 20 wyników to nie ma się czym martwić(mam na myśli "ORDER BY RAND()"), natomiast samo "ORDER BY count" będzie przy dużej ilości wyników sprawiać Ci duże problemy, dlatego lepszym rozwiązaniem byłoby dodanie do tabeli t(gdzie wnioskuję, że video_id jest PK) poletko w którym trigerem będziesz apdejtował ilość jaka siedzi w videos.
> > Pozdrawiam
csh - 01-09-2007 00:16
On 31 Sie, 08:58, Herakles <herak...@buziaczek.pl> wrote: > > Ok, pierwszy problem rozwiazalem tak: > > SELECT * FROM (SELECT t.tag, COUNT(*) AS count FROM video_tags AS t > > INNER JOIN videos AS v ON v.id = t.video_id AND v.cat_id = 2 GROUP BY > > t.tag ORDER BY count DESC LIMIT 20) AS tags ORDER BY RAND() > > Czy to jedyny sposob ? > > > Aktualne pozostaje dalej pytanie drugie > > Je li sortujesz 20 wyników to nie ma si czym martwi (mam na my li "ORDER BY > RAND()"), natomiast samo "ORDER BY count" b dzie przy du ej ilo ci wyników > sprawia Ci du e problemy, dlatego lepszym rozwi zaniem by oby dodanie do > tabeli t(gdzie wnioskuj , e video_id jest PK) poletko w którym trigerem > b dziesz apdejtowa ilo jaka siedzi w videos. > > > > > Pozdrawiam
Dzieki za odzew Nie bardzo jednak rozumiem ostatnie zdanie :) "ilosc jaka siedzi w videos" tzn ? Przeicez za pomoca COUNT(*) zliczam ilosc takich smaych tagow w tabeli video_tags a nie videos.
Herakles - 01-09-2007 00:16
csh wrote:
> On 31 Sie, 08:58, Herakles <herak...@buziaczek.pl> wrote: >> > Ok, pierwszy problem rozwiazalem tak: >> > SELECT * FROM (SELECT t.tag, COUNT(*) AS count FROM video_tags AS t >> > INNER JOIN videos AS v ON v.id = t.video_id AND v.cat_id = 2 GROUP BY >> > t.tag ORDER BY count DESC LIMIT 20) AS tags ORDER BY RAND() >> > Czy to jedyny sposob ? >> >> > Aktualne pozostaje dalej pytanie drugie >> >> Je li sortujesz 20 wyników to nie ma si czym martwi (mam na my li "ORDER >> BY RAND()"), natomiast samo "ORDER BY count" b dzie przy du ej ilo ci >> wyników >> sprawia Ci du e problemy, dlatego lepszym rozwi zaniem by oby dodanie do >> tabeli t(gdzie wnioskuj , e video_id jest PK) poletko w którym trigerem >> b dziesz apdejtowa ilo jaka siedzi w videos. >> >> >> >> > Pozdrawiam > > Dzieki za odzew > Nie bardzo jednak rozumiem ostatnie zdanie :) "ilosc jaka siedzi w > videos" tzn ? > Przeicez za pomoca COUNT(*) zliczam ilosc takich smaych tagow w tabeli > video_tags a nie videos.
No faktycznie nie doczytałem, ale to jakoś mi nie podchodzi wydajnościowo wogóle.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
=?ISO-8859-2?Q?=5BORACLE=2C_ORDER_BY=5D_Czy_indeksowane_?==?I SO-8859-2?Q?kolumny_przy=B6piesz=B1_sortowanie=3F?=
sql -> tworzenie nowej kolumny z dzielenia 2 innych i sortowanie po niej
=?iso-8859-2?q?Sortowanie_wyniku_wg_dw=F3ch_kryteri=F3w?=
[ORACLE] sortowanie =?ISO-8859-2?Q?wed=B3ug_ci=B1gu?=
mysql: left join group by order by - problem z sortowaniem
=?iso-8859-2?Q?PostgreSQL_-_jak_ustawi=E6_sortowanie=3F?=
Najlepszy algorytm sortowania ciągu częściowo posortowanego
[MySQL] Dwa typy sortowania w jednej tabeli
jak wymusic sortowanie mysql dla znakow kodowanych w cp1250
[PGSQL] Sortowanie wg indeksu innej tabeli
zanotowane.pldoc.pisz.plpdf.pisz.plred-hacjenda.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|