![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 9.02.2015 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Tworzę serwis w którym będę listował rekordy z pewnej tabeli. Zapytanie będzie miało kilka parametrów (przykładowo: p1, p2, p3, p4, p5). Generalnie chciałbym aby wyniki były zwracane wg zgodności, tj. najpierw wyniki w których wszystkie 5 parametrów są równe, następnie takie w których równe są 4 parametry, 3, itd. Zastanawiam się co jest lepszym rozwiązaniem: rozbicie zapytań na kilka oddzielnych czy połączenie ich za pomocą UNION? Inną sprawą jest to że jednym z parametrów będzie data (w formacie RRRR:MM:DD gg:mm:ss) i zależałoby mi na tym aby najpierw wyświetlane były rekordy o równej dacie, a następnie o maksymalnie zbliżonej. Można by to rozwiązać poprzez sortowanie ale problemem jest to że data będzie tylko jednym z atrybutów, przy czym nie będzie miała najwyższej wagi. Jak taki problem najlepiej rozwiązać w SQL? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Union będzie lepsze bo potem wynik tegoż cacka możesz sortować itp.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 9.02.2015 Ostrzeżenie: (0%) ![]() ![]() |
Czy sortowanie wyników jest jedyną różnicą?
Właściwie to będę chciał stosować inne kryterium sortowania dla każdego z podwyników (wg p1 dla 5 zgodnych parametrów, wg p2 dla 4, wg p4 dla 3 zgodnych itp) więc globalne sortowanie nie jest mi tak potrzebne. Interesowała mnie bardziej kwestia wydajności. Lepsze jedno wielkie czy 10 małych zapytań? A co z opisanym przeze mnie problemem dat? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
UNION (bez ALL) wyrzuca duplikaty (również w ramach jednego SELECTa), powinien pilnować ilości i typu poszczególnych kolumn (z typami to MySQL średnio idzie), UNION raczej nie korzysta z indeksów (do końcowego sortowania używa filesorta, czym zabija serwer)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 15:29 |