Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] "złączenie" ORDER BY
php11
post 10.05.2022, 13:44:49
Post #1





Grupa: Zarejestrowani
Postów: 211
Pomógł: 5
Dołączył: 11.02.2011

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


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 ;-)

Go to the top of the page
+Quote Post
phpuser88
post 10.05.2022, 14:16:20
Post #2





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 4.05.2019
Skąd: PHP5.6

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


  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.
Go to the top of the page
+Quote Post
trueblue
post 10.05.2022, 14:23:38
Post #3





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


A nie powinieneś czasem sortować wpierw po bbb skoro chcesz pokazać najpierw rekordy z największą ilością wyświetleń?


--------------------
Go to the top of the page
+Quote Post
php11
post 10.05.2022, 15:04:53
Post #4





Grupa: Zarejestrowani
Postów: 211
Pomógł: 5
Dołączył: 11.02.2011

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


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ę
Go to the top of the page
+Quote Post
phpuser88
post 10.05.2022, 15:30:08
Post #5





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 4.05.2019
Skąd: PHP5.6

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


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







Go to the top of the page
+Quote Post
php11
post 10.05.2022, 15:59:41
Post #6





Grupa: Zarejestrowani
Postów: 211
Pomógł: 5
Dołączył: 11.02.2011

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


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?
Go to the top of the page
+Quote Post
phpuser88
post 10.05.2022, 16:02:46
Post #7





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 4.05.2019
Skąd: PHP5.6

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


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)

Ten post edytował phpuser88 10.05.2022, 16:08:07
Go to the top of the page
+Quote Post
trueblue
post 11.05.2022, 12:50:25
Post #8





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Pokaż kilka przykładowych rekordów i jaki wynik chciałbyś uzyskać.


--------------------
Go to the top of the page
+Quote Post
Johnas
post 11.05.2022, 15:33:50
Post #9





Grupa: Zarejestrowani
Postów: 650
Pomógł: 16
Dołączył: 5.07.2010
Skąd: Ściśle Tajne

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


możesz jeszcze sumować dwa pola i wyświetlać po sumie tych pól


--------------------
Jak coś jest dobre, to nie znaczy że nie może być to lepsze - Ideały nie istnieją ;D
Strony internetowe Świnoujście
Go to the top of the page
+Quote Post
php11
post 19.05.2022, 09:46:51
Post #10





Grupa: Zarejestrowani
Postów: 211
Pomógł: 5
Dołączył: 11.02.2011

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


"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ń
Go to the top of the page
+Quote Post
trueblue
post 19.05.2022, 09:51:41
Post #11





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


A jeśli BBB=1000, a AAA=1, to gdzie ma się znaleźć rekord?


--------------------
Go to the top of the page
+Quote Post
php11
post 19.05.2022, 09:57:53
Post #12





Grupa: Zarejestrowani
Postów: 211
Pomógł: 5
Dołączył: 11.02.2011

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


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)
Go to the top of the page
+Quote Post
trueblue
post 19.05.2022, 10:05:01
Post #13





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Pisałem o tym w poście #3.
Najpierw sortowanie po polu BBB, potem po polu AAA.


--------------------
Go to the top of the page
+Quote Post
php11
post 19.05.2022, 10:46:18
Post #14





Grupa: Zarejestrowani
Postów: 211
Pomógł: 5
Dołączył: 11.02.2011

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


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)
Go to the top of the page
+Quote Post
trueblue
post 19.05.2022, 10:51:16
Post #15





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


To dodatkowo warunek na BBB>0, czy też COALESCE(BBB,0)>0


--------------------
Go to the top of the page
+Quote Post
php11
post 19.05.2022, 11:06:34
Post #16





Grupa: Zarejestrowani
Postów: 211
Pomógł: 5
Dołączył: 11.02.2011

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



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


Bardzo dziękuję za pomoc!
Go to the top of the page
+Quote Post
trueblue
post 19.05.2022, 11:08:52
Post #17





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


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


--------------------
Go to the top of the page
+Quote Post
php11
post 19.05.2022, 11:20:05
Post #18





Grupa: Zarejestrowani
Postów: 211
Pomógł: 5
Dołączył: 11.02.2011

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


Teraz wynik mam OK, ale dzięki, sprawdzę z ciekawości.
WHERE ma swoje warunki, może się nie udać ;-)
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 28.04.2024 - 19:52