![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 74 Pomógł: 0 Dołączył: 10.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
Hej,
Mam takie rekordy w bazie: xxxx xxxx yyyy czyli 2 są takie same i 1 inny, w sumie 2 różne. Potrzebuję zrobić zapytanie w stylu (poglądowo): select x,y from tabela order by data desc limit (ilość różnych rekordów czyli 2*30) i nie bardzo mam pomysł jak takie coś zrobic. Ma ktoś może pomysł? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
A mógłbyś wyjaśnić czemu potrzebny jest ten limit?
Akurat w Twoim przypadku przy trzech rekordach limit będzie na 6 rekordów, więc jest kompletnie niepotrzebny. Oczywiście w innych przypadkach będzie mieć wpływ. I dlaczego jest tam mnożnik 30? |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 74 Pomógł: 0 Dołączył: 10.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
Przykładowo podałem bazę, rekordów ja tam mam około 100 i teraz jeśli dam limit 30, to pokaże mi w sumie 15 * xxxxx i 15 * yyyyy, a chciałbym, żeby pokazało 30 * xxxxx i 30 * yyyyy, a więc musiałbym dać limit 60, a nie wiem ile będzie różnych rekordów dublujących się, więc jeśli bym je zliczył, wystarczyłoby pomnożyć limit 30 razy ilość różnych rekordów
|
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Wystarczy ze bedziesz mial pod rzad 59 xxxx i 1 yyyy i caly twoj zmyslny algorytm szlag trafi (IMG:style_emoticons/default/wink.gif)
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 74 Pomógł: 0 Dołączył: 10.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
w sumie masz rację. to jakby to rozwiązać?
chociaż czekaj, 59x i 1y, to 2 różne, a wiec 30*2 rozne = 60, a wiec tyle ile byłoby rekordow, czyli by zadziałało? Ten post edytował Destrudo 8.02.2017, 17:23:05 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 95 Pomógł: 7 Dołączył: 27.10.2015 Ostrzeżenie: (0%) ![]() ![]() |
jaki to problem ma rozwiązywać? bo wygląda że trzeba do tego zupełnie inaczej podejść, ale musisz powiedzieć jaki problem to ma rozwiązywać, a nie sugerować gotowe (raczej złe) pomysły.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 74 Pomógł: 0 Dołączył: 10.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
powinno mi pokazać ostatnie 30 rekordow z bazy danych dla każdego rodzaju rekordu, czyli 30 dla xxxx i 30 dla yyyy. Jeśli po prostu wpiszę limit 30, to mi pokaże po 15 (w sumie będzie 30), a chciałbym po 30 dla każdego
|
|
|
![]()
Post
#8
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat chociaż czekaj, 59x i 1y, to 2 różne, a wiec 30*2 rozne = 60, a wiec tyle ile byłoby rekordow, czyli by zadziałało? No jak zadziala? Wyswietli ci 59xxx i 1 yyyy a chciales miec po 30 (IMG:style_emoticons/default/wink.gif)
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 74 Pomógł: 0 Dołączył: 10.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
fakt (IMG:style_emoticons/default/biggrin.gif) chodzi mi generalnie o to, żeby nie tyle po 30, co maksymalnie 30 z każdego, bo nieraz będzie 50 z jednego i 2 z innego czy tego typu
|
|
|
![]()
Post
#10
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat żeby nie tyle po 30, co maksymalnie 30 z każdego, bo nieraz będzie 50 z jednego i 2 z innego czy tego typu No tego to ja sie domyslilem (IMG:style_emoticons/default/wink.gif)
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 74 Pomógł: 0 Dołączył: 10.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
Widzę właśnie (IMG:style_emoticons/default/biggrin.gif) To jakby to rozwiąząć?
|
|
|
![]()
Post
#12
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Wpierw pobierasz wszystkie rozne xxxx yyyyy.
SELECT DISTINCT.... potem dla kazdego piszesz zapytanie ktore pobierze ci max 30 rekordow dla kazdego z nich ...where costam=xxxxx limit 30 ...where costam=yyyyy limit 30 itd Mozesz to upchnoc w UNION i miec jedno zapytanie zamiast x malych |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 74 Pomógł: 0 Dołączył: 10.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
a jeśli nie znam xxxxx i yyyy? tzn bedzie tyle roznych, ze caly czas musialbym modyfikowac zapytanie zeby mi pokazywalo dobrze i dodawac kolejne warunki z nowymi rekordami? czy źle zrozumiałem?
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 95 Pomógł: 7 Dołączył: 27.10.2015 Ostrzeżenie: (0%) ![]() ![]() |
zrób correlated subquery
|
|
|
![]()
Post
#15
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Dlatego napisalem
Cytat Wpierw pobierasz wszystkie rozne xxxx yyyyy. SELECT DISTINCT.... To zapytanie zwroci ci wszyskie xxxx yyyyy zzzz czy co ty tam masz. |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 74 Pomógł: 0 Dołączył: 10.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
Jednak nie rozumiem :/ mógłbyś podać poglądowy przykład? może niekoniecznie gotowca, ale schemat, bo zbyt ogolnie napisales i nie rozumiem. dajmy na to, że mam już zrobiony select distinct na limit 30 tak? co dalej?
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 95 Pomógł: 7 Dołączył: 27.10.2015 Ostrzeżenie: (0%) ![]() ![]() |
nie słuchaj nospora - zrób correlated subquery tak jak Ci wujek mówi:
potem:
potem:
działa? ano działa |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
javafxdev,
nie do końca, bo miały to być rekordy sortowane według daty, a nie po prostu top/last z grupy.
5 rekordów z każdej grupy sortowane według daty desc:
|
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 95 Pomógł: 7 Dołączył: 27.10.2015 Ostrzeżenie: (0%) ![]() ![]() |
ja bym się pokusił jeszcze w Twoim przykładzie zeby zamiast x1.x=x2.x dać x1.id=x2.id wtedy trochę bardziej zoptymalizowane będzie. ale ogólnie masz rację - w moim przykładzie brakowało sortowania po datach w grupach. Chodziło mi bardziej o pokazanie żeby nie robić jakiś niepotrzebnych UNIONÓW i DISTINCTÓW tylko ładnie machnąć w SQL.
|
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 74 Pomógł: 0 Dołączył: 10.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuje, działa fajnie, tylko jak np pokazuje mi:
xxxx - 30 rekordów yyyy - 30 rekordów i teraz dajmy na to dodam 2 kolejne rekordy xxxx i yyyyy, tylko że yyyy z nowszą datą, to yyyy - 30 rekordów, pokaże się najpierw, a chciałbym tego nie zmieniać, czyli jak kolejność jest już: xxxx - 30 rekordów yyyy - 30 rekordów to żeby tylko rekordy się sortowały, a nie xxxx i yyy i kolejność nie zmieniła się na: yyyy - 30 rekordów xxxx - 30 rekordów Ten post edytował Destrudo 9.02.2017, 08:37:22 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 22:33 |