![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 68 Pomógł: 0 Dołączył: 10.03.2003 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam tabele | IdPorduktu | IdKategorii | NazwaProduktu | DataDodania | Chce z niej wyciągnąć po 5 produktów dla każdego id_kategorii posortowane według DataDodanie Desc (5 najnowszych prodktów dla każdej z kategorii) Czy jest to mozliwe w jednym zapytaniu ? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 640 Pomógł: 28 Dołączył: 13.02.2003 Skąd: Międzyrzecz/Poznań Ostrzeżenie: (0%) ![]() ![]() |
Tytuluj tematy bardziej opisowo...
Odp. Tak |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 10 Dołączył: 8.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Możliwe, ale w MySQL wcale nie takie proste. To, co chcesz osiągnąć wymaga funkcji rankingujących, których nie ma w MySQL.
Można to obejść wykorzystując zmienne:
|
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
|
|
|
![]()
Post
#5
|
|
Grupa: Przyjaciele php.pl Postów: 1 595 Pomógł: 282 Dołączył: 24.09.2007 Skąd: Reda, Pomorskie. Ostrzeżenie: (0%) ![]() ![]() |
Cytat Tak? W takim razie proszę napisz mi takowe zapytanie - będę naprawdę wdzięczny. Mój MySQL (5.0.26) krzyczy: KodThis version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery Więc może jeśli nie znasz rozwiązania to nie wprowadzaj ludzi w błąd. och... ludzie małej wiary, proszę oto kod działającvy w MySQL... dla uproszczenia zapisu przyjmijmy: idProduktu = pid idKategorii = cid dataDodania = dd a tabelka to po prostu `tabela`:
oczywiście zamiast 5 można wstawić dowolną inną liczbę. i kto tu kogo wprowadza w błąd?? |
|
|
![]()
Post
#6
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
@nevt: Jeśli Twoje rozwiązanie faktycznie działa (a nie mam jak sprawdzić) to cofam moją wypowiedź i idę schować się do szafy.
(IMG:http://forum.php.pl/style_emoticons/default/wstydnis.gif) (IMG:http://forum.php.pl/style_emoticons/default/brzydal.gif) (IMG:http://forum.php.pl/style_emoticons/default/worriedsmiley.gif) |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 10 Dołączył: 8.11.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
@nevt : Ciekawe podejscie do tego problemu. Nie wpadlem nigdy na to, bo probowalem to zrobic tak jak w ORACLE (rank() over partition). Przetestowalem sobie Twoje zapytanie - dziala pieknie, ale jest jeden problem - dla ok. 6mln rekordow robi sie bardzo bardzo wolne. Pewnie dlatego, ze podzapytanie w WHERE budowane jest dla kazdego rekordu, a dla tego podzapytania MySQL nie wykorzystuje INDEX'ow.
Rozwiazanie ze zmiennymi tez nie jest najlepsze, ale sa tylko 2 loopy przez cala tabelke i lata duzo szybciej. |
|
|
![]()
Post
#8
|
|
Grupa: Przyjaciele php.pl Postów: 1 595 Pomógł: 282 Dołączył: 24.09.2007 Skąd: Reda, Pomorskie. Ostrzeżenie: (0%) ![]() ![]() |
to oczywiste że moja konstrukcja jest nieoptymalna - sam ją stosuję tylko na b. krótkich tabelkach...
chodziło tylko o demonstrację, że jest to technicznie możliwe w jednym zapytaniu, bez zmiennych pomocniczych i pętli... pozdrawiam wszystkich. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 68 Pomógł: 0 Dołączył: 10.03.2003 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
Dzięki wszystkim za zainteresowanie i pomoc (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 22:51 |