Topic: 3 įrašų nuskaitymas iš kiekvienos kategorijos

Sveiki,

turim lentelę
subkategorijos(id, pavadinimas, kategorijos_id, reitingas)

Kaip nuskaityti po tris įrašus (arba po tiek, kiek jų yra, jei jų mažiau nei 3) kiekvienai kategorijai pagal reitingą?
T.y. rezultatas turi būt maždaug toks:

45 pav 1 1
48 pav 1 3
65 pav 1 4
49 pav 2 2
72 pav 2 5
56 pav 2 7
67 pav 3 6
21 pav 3 8
78 pav 4 9
89 pav 4 10
91 pav 4 12
32 pav 5 11

Kokie pasiūlymai? Kaip optimaliai nuskaityti reikiamus duomenis?


Warning: count(): Parameter must be an array or an object that implements Countable in /home/pasokime/domains/mysql.lt/public_html/forumas/include/parser.php on line 820

Re: 3 įrašų nuskaitymas iš kiekvienos kategorijos

SELECT * FROM `subkategorijos` ORDER BY `reitingas` DESC LIMIT 0,3

Jei maziau nei 3 irasai, tai ir gausi maziau nei 3 irasus

Re: 3 įrašų nuskaitymas iš kiekvienos kategorijos

Stengiausi aiškiai paaiškinti ko noriu, bet panašu, kad taip nesigavo.
Kad būtų vaizdžiau, pakomentuosiu rezultatus. Pirmas stulpelis (subkategorijos ID) ir antras (subkategorijos pavadinimas) reikšmės neturi. Trečias stulpelis kategorijos, kuriai priklauso subkategorija ID, ketvirtas reitingas pagal kurį rikiuojame. Rikiavimas ASC.

45 pav 1 1 // tai pirmas įrašas iš kategorijos NR 1. pagal reitingą (1)
48 pav 1 3
65 pav 1 4 // tai rečias įrašas iš kategorijos NR 1. pagal reitingą (4)
49 pav 2 2
72 pav 2 5
56 pav 2 7
67 pav 3 6 // tai pirmas įrašas iš kategorijos NR 3. pagal reitingą (6)
21 pav 3 8 // tai antras ir paskutinis įrašas iš kategorijos NR 3, nes joje tik du įrašai
78 pav 4 9
89 pav 4 10
91 pav 4 12
32 pav 5 11 // kategorijoje NR 5 tik vienas įrašas

Jeigu naudotume UNION, viskas atrodytų taip:

(SELECT * FROM `subkategorijos` WHERE `kategorijos_id` = 1 LIMIT 3) UNION (SELECT * FROM `subkategorijos` WHERE `kategorijos_id` = 2 LIMIT 3) UNION...

Ar įmanoma padaryt kažką geriau negu UNION?

Re: 3 įrašų nuskaitymas iš kiekvienos kategorijos

Nyfyga nesupratau, na bet gal kas pades. Sekmes ;)

Re: 3 įrašų nuskaitymas iš kiekvienos kategorijos

Min2liz wrote:

Nyfyga nesupratau, na bet gal kas pades. Sekmes ;)

Tai pažiūrėk į užklausą su UNION. Iš tos tikrai aišku ko noriu.
Aš klausiu ar tą užklausą galima supaprastinti.

Re: 3 įrašų nuskaitymas iš kiekvienos kategorijos

Pirmas klausimas, tavo subkategorijos reitingas yra kiekvienai subkategorijai skaičiuojamas atskirai, ar bendras visoms subkategorijoms?

Re: 3 įrašų nuskaitymas iš kiekvienos kategorijos

Problema čia yra tame, kad MySQL'e nėra tokio dalyko, kaip ištraukti norimą elementų kiekį kiekvienoje kategorijoje.

Vienas būdas yra turėti tokią lentelę, kurioje ir būtų surašyti ID tų elementų, kurie turėtų gautis atlikus užklausą.

Antras būdas yra pasigaminti skaitliuką, ir skaičiuoti kiekvieno elemento eilę toje kategorijoje ir rezultate atfiltruoti tik tiek, kiek reikia. Pavyzdys yra čia:
http://www.mysql.lt/wiki/SQL:Norimas_El … l_Atributa

Re: 3 įrašų nuskaitymas iš kiekvienos kategorijos

šiandien prisėdau prie šito reikalo. Viską labai paprastai ir greitai sutvarkiau. Viskas veikia. Labai ačiū!