TwojePC.pl © 2001 - 2024
|
|
A R C H I W A L N A W I A D O M O Ś Ć |
|
|
|
MySQL i sortowanie , Deus ex machine 5/09/08 15:23 ma ktos pomysl jak zrobic prosto?
Przykladowo jest tabelka 100k rekordow
Imie | numer
imiona i numery moga sie powtarzac, a takze ich pary moga sie powtarzac np.
andzia | 13
andzia | 15
jozek | 13
jozek | 10
andzia | 13
andzia | 13
andzia | 13
Teraz chce otrzymac posortowany wynik najpierw same 13 pozniej 10 pozniej 15, a dalej juz pozostale. Oczywiscie kolejnosc przykladowa.
Poki co Jenot wymysli union, ja nic lepszego nie wymyslilem, ale moze ktos ma jakis fajny pomysl?
Rzeczywiste tabele nie maja po 2 pol, tylko po 15 i wiecej. To tylko do zobrazowania problemu."Uti non Abuti" - siakiś , Wedrowiec 5/09/08 15:37
if()"Widziałem podręczniki
Gdzie jest czarno na białym
Że jesteście po**bani" - nie bardzo widze jako , Deus ex machine 5/09/08 15:42
go tutaj uzyc?"Uti non Abuti"
- dodaj kolejne pole , Norton 5/09/08 15:53
daj tinyint, nazwij je priorytet czy kolejność.
potem updatnij przypisując dla rekordów z numer=13 3
dla dziesiątek 2, dla 15 przypisz 1.
Potem posortuj wg nowej kolumny.
Możesz dodać też nową tabelę "priorytety"
numer|priorytet
13 | 3
10 | 2
15 | 1
potem join po kluczu "numer" i sortowanie po priorytetZmień swój podpis na Boardzie
maks 100 znaków, 3 linie,
zabroniony spam oraz reklama - CASE , bwana 5/09/08 16:31
select case numer_osoby
when 13 then 1
when 15 then 2
else 3
end,
imie_osoby
from osoby
order by 1(*)
(*) nie jestem pewien, czy w MySQL można określić w ten sposób sortowanie, w Oracle order by 1,3,5 oznacza sortowanie według 1, 3, 5 kolumny z wyniku zapytania. Jeśli tak nie można, należy pewnie przepisać wyrażenie case do klauzuli order by, czyli uzyskać zapis:
select case numer_osoby
when 13 then 1
when 15 then 2
else 3
end,
imie_osoby
from osoby
order by
case numer_osoby
when 13 then 1
when 15 then 2
else 3 end
Ten drugi sposób mi się nie podoba, bo trzeba przepisywać coś, co już istnieje, dlatego wolę momentami orasql od ansi:-)
end"you don't need your smile when I cut
your throat" - chcialem zaproponowac podobne rozwiazanie , HussaR 5/09/08 16:43
z funkcja DECODE - przy czym tez nie jestem pewien czy to nie tylko dla Oracle'a ;)Największym marzeniem człowieka jest latać i nie
spaść na ryj - tiaaa, decode to pierwsza rzecz jakiej użyłbym pod orakielem , bwana 5/09/08 22:17
ale w majsikuelu brak:-)"you don't need your smile when I cut
your throat"
- ... , Amber 5/09/08 18:45
select * from tabelka order by numer asc/desc
zależenie czy od najmniejszej czy od największej
union jest jak chce się wyciągnąć z 2 tabelAkcja wyborcza 2011:
uratuj polskę oddaj babci dowód!!! - zwykly order nie wystarczy , Deus ex machine 5/09/08 19:26
union mialby polegac na polaczeniu wynikow kilku selectow (po kazdym kolejnym warunku).
Bardziej przemawia zastosowanie case lub if i tworzenie wirtualnej kolumny, zobacze w poniedzialek i potestuje .)"Uti non Abuti" - a to zależy , bwana 5/09/08 22:19
np. od tego, czy baza gwarantuje czy nie gwarantuje kolejności wierszy zgodnej z kolejnością wyrażeń połączonych unią (union, union all). Jeśli gwarantuje, to unia BEZ klauzuli order by załatwi sprawę:-)"you don't need your smile when I cut
your throat"
- ... , Amber 5/09/08 19:38
case i if mozna dawac ale trzeba okreslic konkretne warunki, a ty chcesz wyciagac po liczbach nie?Akcja wyborcza 2011:
uratuj polskę oddaj babci dowód!!! - w accessie , Zajkos 5/09/08 21:21
bym zrobił tak - dodał tabele z kolumnami numer i priorytet, połaczył ja relacją z tabelą docelową i zrobił selecta z wszystkich pol tabeli pierwotnej plus priorytet z drugiej tabeli sortujac po tym polu |
|
|
|
|
All rights reserved ® Copyright and Design 2001-2024, TwojePC.PL |
|
|
|
|