Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sortowanie według dwóch kolumn
Forum PHP.pl > Forum > Bazy danych > MySQL
CzarnyGsm
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
croc
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.
CzarnyGsm
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?
croc
Znowu coś nie tak smile.gif Drążę tak, bo Twoje pytanie można interpretować na co najmniej 3 sposoby.
CzarnyGsm
? no nie wiem jak już dla Pana to napisać, ale przykładowe wyniki powinny już zobrazować o co mi chodzi 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.
croc
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.
CzarnyGsm
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.
melkorm
Pobierz w/g weight a później w PHP posortuj sobie po nazwie tagu i tyle.
CzarnyGsm
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.
melkorm
  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.
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.