Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] "złączenie" ORDER BY
Forum PHP.pl > Forum > Przedszkole
php11
Cześć,

sortuję wyniki zapytania po dwóch kolumnach:

  1. ORDER BY aaa DESC, bbb DESC;


gdzie aaa to wartość z jednego pola, a bbb ilość wyświetleń


Ja połączyć to sortowanie tak, by jako peirwszy pokazał się wynik z najwiekszą ilością wyświetleń oraz własciwą zawartością pola aaa.


GROUP BY nie wyświetla mi wszystkiego (bo nie ma wyswietleń lub włąściwej wartości pola AAA)


Uff, mam nadzieję, że zrozumiecie ;-)

phpuser88
  1. ORDER BY aaa DESC, bbb DESC;

To poprawne sortowanie, ale prawdopodobnie popełniasz błąd logiczny. Nie posortujesz w poprawnej kolejności równocześnie w obu kolumnach przy różnych wartościach - zawsze kolumna bbb(druga kolumna) będzie podlegać sortowaniu względem pierwszej, ale w sposób DESC. Musisz wykonać dwa zapytania z sortowaniem dla aaa i bbb, a później połączyć wyniki w wybrany sposób.
trueblue
A nie powinieneś czasem sortować wpierw po bbb skoro chcesz pokazać najpierw rekordy z największą ilością wyświetleń?
php11
Cytat(phpuser88 @ 10.05.2022, 15:16:20 ) *
Musisz wykonać dwa zapytania z sortowaniem dla aaa i bbb, a później połączyć wyniki w wybrany sposób.


Ok, ale jak to zrobić?
To będzie jedno zapytanie?

Cytat(trueblue @ 10.05.2022, 15:23:38 ) *
A nie powinieneś czasem sortować wpierw po bbb skoro chcesz pokazać najpierw rekordy z największą ilością wyświetleń?


Nie da rady, bo nie wszystko ma albo wyświetlenaia, albo własciwie wypełnine pole


Właśnie "łączenia" potrzebuję
phpuser88
Generalnie to czego oczekujesz jest sprzeczne z logiką, bo wyniki i tak będą różne, ale jeśli chcesz koniecznie uzyskać efekt DESC dla obu wartości, to wystarczą dwa oddzielne, proste zapytania z osobnym sortowaniem dla aaa i bbb.
  1. ORDER BY aaa DESC
  2. ORDER BY bbb DESC

A jak połączyć wyświetlanie tych wyników, to już zależy od Ciebie i konkretnego oczekiwanego rezultatu. Jeżeli chcesz wyświetlić największą `ilość wyświetleń` i największą `wartość`, to zawsze będzie to rozbicie na dwa osobne zapytania, albo będziesz musiał dodać z góry określony warunek dla wybranej `wartości`.
  1. SELECT * FROM `x` where `aaa`=10 ORDER BY `bbb` DESC







php11
Cytat(phpuser88 @ 10.05.2022, 16:30:08 ) *
  1. SELECT * FROM `x` where `aaa`=10 ORDER BY `bbb` DESC


A czy można ustawić MAX JAKOŚ dla where `aaa` ?
A potem ORDER BY `bbb` DESC

Będzie to hulało?
phpuser88
masz na myśli to? `aaa` <= 10
Będzie hulało zgodnie dla sortowania `bbb` DESC (tzn. nie będzie w kolejności, której prawdopodobnie błędnie oczekujesz)
trueblue
Pokaż kilka przykładowych rekordów i jaki wynik chciałbyś uzyskać.
Johnas
możesz jeszcze sumować dwa pola i wyświetlać po sumie tych pól
php11
"Po prostu" wyniki, które są zwrócone w kolejności od najwiekszej liczby wyświetleń (AAA) chcę dodatkowo posortować po zawartości pola BBB.

Jeżeli dla najwyższej wartości AAA (najwięcej wyświetleń) wartość BBB nie jest właściwa (np. 0), to nie chcę tej tabeli widzieć na początku.

Powinna być dopiero po wyświetlaniu wszystkich wierszy z BBB == 1, które się wyświetlają w kolejności od najwyższej liczby wyświetleń
trueblue
A jeśli BBB=1000, a AAA=1, to gdzie ma się znaleźć rekord?
php11
BBB to 0 lub 1


Najpierw wyświetlam te z BBB == 1 (w kolejności od najwekszej liczby wyświetleń AAA) a później te z BBB == 0 (w kolejności od najwekszej liczby wyświetleń AAA)
trueblue
Pisałem o tym w poście #3.
Najpierw sortowanie po polu BBB, potem po polu AAA.
php11
Dzięki za pomoc.


Mój błąd: pole BBB moze mieć więcej wartości, a ja potrzebuję warunek gdy jest większe od 0 (a może gdy niepuste)
trueblue
To dodatkowo warunek na BBB>0, czy też COALESCE(BBB,0)>0
php11

COALESCE(BBB, 0) > 0 desc, AAA desc


Bardzo dziękuję za pomoc!
trueblue
Sprawdź dobrze, czy dokładnie o to Ci chodziło, bo:
  1. ORDER BY COALESCE(BBB, 0) > 0 DESC, AAA DESC

to nie to samo co:
  1. WHERE COALESCE(BBB, 0) > 0
  2. ORDER BY BBB DESC, AAA DESC
php11
Teraz wynik mam OK, ale dzięki, sprawdzę z ciekawości.
WHERE ma swoje warunki, może się nie udać ;-)
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.