Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Sortowanie wg wlasnego klucza
jach
post
Post #1





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 21.03.2005

Ostrzeżenie: (0%)
-----


Witam

Czy istnieje mozliwosci sortowania w MySQL wg zdefiniowanego przeze mnie klucza ? Np mam w tabeli piec wierszy w tabeli o kolejnych ID -> 1,2,3,4,5 i chcialbym sobie posortowac wg mojego klucza np
Kod
Select id ..... order by klucz '2,3,4', id desc
aby otrzymac ID w kolejnosci 2,3,4,1,5. Ewentualnie sortowac text wg mojego wzorca a nie tylko alfabetycznie/odwrotnie alfabetycznie

Nie moge sie doszukac w manualu ;( - z gory dziekuje za pomoc
Go to the top of the page
+Quote Post
wozniak
post
Post #2





Grupa: Zarejestrowani
Postów: 278
Pomógł: 0
Dołączył: 21.11.2003

Ostrzeżenie: (0%)
-----


Kod
ORDER BY klucz
i bedzie wyswietlac
z pola np. klucz alfabetycznie tzn.
1
2
3...
A
B
C..
Go to the top of the page
+Quote Post
jach
post
Post #3





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 21.03.2005

Ostrzeżenie: (0%)
-----


Rozumie iz musze sobie klucz istawic jako pole tabeli i wypelnic je odpowiednimi wartosciami - nie ma mozliwosci zdefiniwania takiego klucza recznie (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

dzieki za info
Go to the top of the page
+Quote Post
wozniak
post
Post #4





Grupa: Zarejestrowani
Postów: 278
Pomógł: 0
Dołączył: 21.11.2003

Ostrzeżenie: (0%)
-----


tak; np:
ORDER BY sort
id|nazwa|sort|
2|abc|1
4|bcd|2
1|ssd|3
3|we|4
Go to the top of the page
+Quote Post
intol
post
Post #5





Grupa: Zarejestrowani
Postów: 110
Pomógł: 1
Dołączył: 29.07.2003

Ostrzeżenie: (10%)
X----


wozniak
...mógłbyć przedstawić jakiś przykład? Bo trudno mi zrozumieć twój post...

Z góry dzięki.
Go to the top of the page
+Quote Post
spenalzo
post
Post #6





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

Ostrzeżenie: (0%)
-----


A jak zachowa sie zapytanie:
  1. SELECT *
  2. FROM tabela
  3. WHERE ID IN (2,6,9,1,3,5)

czyli bez podawania order by, a za to z wymuszeniem sprawdzenia id? Nie mam teraz możliwości tego sprawdzić.
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




no niestety spenalzo, ale to nic nie da. To jest określenie tylko warunku, a nie kolejności
Go to the top of the page
+Quote Post
spenalzo
post
Post #8





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Jeżeli BARDZO ci zależy na takim sortowanie to zostaje wyjście takie:
  1. SELECT *, CASE pole
  2. WHEN '6' THEN 1
  3. WHEN '12' THEN 2
  4. WHEN '7' THEN 3
  5. WHEN '1' THEN 4
  6. WHEN '2' THEN 5
  7. ELSE NULL
  8. END AS sortowanie
  9. FROM tabela
  10. ORDER BY sortowanie
Go to the top of the page
+Quote Post
TomASS
post
Post #9





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


tutaj chciałem osiągnąć coś takiego jak Ty. Jedynym wyjściem wydaje się być rozwiązanie zaproponowane przez kolege spenelazo lub utworzenie osobnego pola np.o nazwie kolejność i wg. niego sortowanie, chyba, że wrzucisz to wszystko do php i będziesz sortował tablice, jednak MySQL prawdopodobnie zrobi to szybciej (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Jak coś znajdziesz to pisz....
Go to the top of the page
+Quote Post
intol
post
Post #10





Grupa: Zarejestrowani
Postów: 110
Pomógł: 1
Dołączył: 29.07.2003

Ostrzeżenie: (10%)
X----


Ja szukając w google natrafiłem na coś takiego:

Cytat
A common question on the mailing lists is how to sort results in a particular order. Just use the FIELD function:

SELECT * FROM tickets
ORDER BY FIELD(priority, 'High', 'Normal', 'Low', 'The Abyss');


link: http://dev.mysql.com/doc/refman/5.0/en/sorting-rows.html .

Tylko mam jakieś problemy z funkcją FIELD (nie rozpoznaje funkcji), może to dlatgo że pracuję na SQLite.
Go to the top of the page
+Quote Post
nospor
post
Post #11





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




@intol mi ta funkcja dziala, a mam mysql 4.1

na tej stronce tez byl inny kod:
  1. SELECT *
  2. FROM tablename ORDER BY priority='High' DESC, priority='Medium' DESC, priority='Low' DESC;
Też dziala (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
SongoQ
post
Post #12





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


Ten temat sie juz przez forum przewijal. Oczywiscie najlepszym dla wydajnosci jest podanie wartosci w ORDER BY dla sortowania. Dla pewnosci polecam uzyc explain
Go to the top of the page
+Quote Post
TomASS
post
Post #13





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


SongoQ proszę Cię abyś rozwiną swoją myśl. Jeśli to już było to proszę Cię abyś zapodał linka (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Dzięki !
Go to the top of the page
+Quote Post
jach
post
Post #14





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 21.03.2005

Ostrzeżenie: (0%)
-----


Podsumowuja temat przynajmniej dla mnie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

okreslona kolejnosc id (INT) otrzymamy po operacji
Kod
SELECT id FROM tabela ORDER BY id = ( 2 +0 ) DESC , id = ( 3 +0 ) DESC , id = ( 4 +0 ) DESC , id = ( 1 +0 ) DESC


operacja (1 + 0 ) - to rzutowanie do INT znacznie przyspieszajace operacje SELECT (oczywiscie uzalezniam to od rodzaju pola ID)
Go to the top of the page
+Quote Post
spenalzo
post
Post #15





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Jak podajesz:
id=2 to jest int
id='2' to jest string
wiec teoretycznie nie musisz robic +0.
Go to the top of the page
+Quote Post
intol
post
Post #16





Grupa: Zarejestrowani
Postów: 110
Pomógł: 1
Dołączył: 29.07.2003

Ostrzeżenie: (10%)
X----


Moim zdaniem rozwiązanie
Kod
WHEN '6' THEN 1
WHEN '12' THEN 2
WHEN '7' THEN 3
WHEN '1' THEN 4
WHEN '2' THEN 5
ELSE NULL

jest jednak szybsze niz to 2 posty wyzej (sprawdzamy - w optymistycznym wariancie - tylko raz, a nie cztery razy).
Go to the top of the page
+Quote Post
spenalzo
post
Post #17





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Różnice bedą tak minimalne, że pewnie niezauważalne...
Go to the top of the page
+Quote Post
SongoQ
post
Post #18





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


@TomASS Oczywiscie chodzilo mi o sposob ktory podal @jach - troszeczke mozna to uproscic.

@spenalzo
Cytat
Różnice bedą tak minimalne, że pewnie niezauważalne...

Wladuj do DB kilka milionow rekordow i na pewno zobaczysz roznice. (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 10.10.2025 - 02:02