Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Sortowanie według dwóch kolumn
CzarnyGsm
post
Post #1





Grupa: Zarejestrowani
Postów: 84
Pomógł: 2
Dołączył: 16.04.2007

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


Witam,

Mam otóż taki problem, chciałbym wyciągnąć z tablicy konkretną liczbę rekordów(np. 5), które byłyby posortowane alfabetycznie według kolumny title i były to rekordy z największą wagą wg. kolumny weight.
Struktura tablicy pcms_tag_weights
id title weight
Myślałem, że wystarczy po pierwsze posortować rekordy według kolumny weight malejąco, a następnie malejąco wg. title i wyciągnąć 5 rekordów.
  1. SELECT `pcms_tag_weights`.`title` , `pcms_tag_weights`.`weight`
  2. FROM `pcms_tag_weights`
  3. ORDER BY `weight` DESC, `title` ASC
  4. LIMIT 0 , 5

Ale niestety sortuje tylko wg. kolumny 'weight'.
Byłbym wdzięczny za pomocną odpowiedź.

Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
croc
post
Post #2





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

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


Cytat(CzarnyGsm @ 3.11.2011, 18:47:51 ) *
które byłyby posortowane alfabetycznie według kolumny title i były to rekordy z największą wagą wg. kolumny weight

Ten opis jest nieścisły. Podaj przykładowe dane i to, co chciałbyś z nich wyciągnąć. Bo nie można powiedzieć, że chcesz coś posortować wg pola A, ale tak, żeby pole B było posortowane.
Go to the top of the page
+Quote Post
CzarnyGsm
post
Post #3





Grupa: Zarejestrowani
Postów: 84
Pomógł: 2
Dołączył: 16.04.2007

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


Rzeczywiście, nie sprecyzowałem dokładnie.
Przykładowo mając rekordy:

id # title # weight
---------------------
1 # ala # 1
2 # ma # 2
3 # kota # 1
4 # psa # 1
5 # słonia# 3
6 # konia# 2

Chciałbym pobrać załóżmy 3 rekordy z bazy w takiej formie, aby były to rekordy z największymi wagami i były uporządkowane alfabetycznie wg. tytułu.
Po wywołaniu selecta chciałbym dostać:
6 # konia # 2
2 # ma # 2
5 # słonia # 3

Czy MySql daje możliwość zwrócenia w takiej formie wyników?

Ten post edytował CzarnyGsm 4.11.2011, 14:45:34
Go to the top of the page
+Quote Post
croc
post
Post #4





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

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


Znowu coś nie tak (IMG:style_emoticons/default/smile.gif) Drążę tak, bo Twoje pytanie można interpretować na co najmniej 3 sposoby.
Go to the top of the page
+Quote Post
CzarnyGsm
post
Post #5





Grupa: Zarejestrowani
Postów: 84
Pomógł: 2
Dołączył: 16.04.2007

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


? no nie wiem jak już dla Pana to napisać, ale przykładowe wyniki powinny już zobrazować o co mi chodzi (IMG:style_emoticons/default/tongue.gif)
Może jeszcze inaczej napiszę.
W jaki sposób mogę pobrać zadaną wcześniej ilość rekordów, takich że są to rekordy z największą wartością wg. kolumny 'weight'
Cytat
czyli według powyższego przykładu; limit 0, 3:
5 # słonia# 3
2 # ma # 2
6 # konia# 2
----reszta u dołu odpada
1 # ala # 1
3 # kota # 1
4 # psa # 1

następnie chciałbym te rekordy uporządkować alfabetycznie wg. 'title'.
Cytat
6 # konia# 2
2 # ma # 2
5 # słonia# 3


Czy da się to zrobić w jednym zapytaniu? Czy muszę rozdzielać to na dwa select'y oraz na tymczasową tabelę?
Z góry dziękuję za pomoc.

Ten post edytował CzarnyGsm 4.11.2011, 14:33:47
Go to the top of the page
+Quote Post
croc
post
Post #6





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

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


W podanym przez Ciebie przykładzie nie masz posortowanych wyników ani alfabetycznie, ani wg weight. Stąd moje pytanie. Spójrz jeszcze raz na swój przykład.
Go to the top of the page
+Quote Post
CzarnyGsm
post
Post #7





Grupa: Zarejestrowani
Postów: 84
Pomógł: 2
Dołączył: 16.04.2007

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


Zgadza się, kolumna title nie jest uporządkowana alfabetycznie(już zedytowałem). Co do wagi to zaznaczyłem przecież, że wpierw chce wyciągnąć rekordy z najwyższymi wagami, a następnie na tych rekordach operować tzn. uporządkować je alfabetycznie według kolumny title.

Dodam, że zwracane wynik z bazy wykorzystam do wyświetlenia tagów.
Czy mogę w jakiś sposób wykonać jeden select, a następnie w drugim select'ie pogrupować uzyskany wyniki wg. kolumny ? Z góry dziękuję za pomoc.

Ten post edytował CzarnyGsm 4.11.2011, 14:46:06
Go to the top of the page
+Quote Post
melkorm
post
Post #8





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


Pobierz w/g weight a później w PHP posortuj sobie po nazwie tagu i tyle.
Go to the top of the page
+Quote Post
CzarnyGsm
post
Post #9





Grupa: Zarejestrowani
Postów: 84
Pomógł: 2
Dołączył: 16.04.2007

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


A czy nie da rady za pomocą zapytania? Wiem, że można w PHP to zrobić, ale zależy mi akurat na zapytaniu.
Z góry dziękuję za pomoc.
Go to the top of the page
+Quote Post
melkorm
post
Post #10





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


  1. SELECT pw2.* FROM (
  2. SELECT pw.`title` , pw.`weight`
  3. FROM `pcms_tag_weights` pw
  4. ORDER BY pw.`weight` DESC
  5. LIMIT 0 , 5
  6. ) pw2 ORDER BY pw2.`title` ASC


Powinno być okej, jak chciałeś zapytanie.

Ten post edytował melkorm 4.11.2011, 18:41:44
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: 23.08.2025 - 18:54