elmaciaso
16.02.2015, 12:39:45
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?
Pyton_000
16.02.2015, 12:59:37
Union będzie lepsze bo potem wynik tegoż cacka możesz sortować itp.
elmaciaso
16.02.2015, 13:20:14
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?
mmmmmmm
16.02.2015, 15:11:57
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)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.