Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] ORDER BY i INNER JOIN, Nie sortuje poprawnie.
mlawnik
post 15.06.2013, 13:20:28
Post #1





Grupa: Zarejestrowani
Postów: 455
Pomógł: 49
Dołączył: 12.04.2010

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


Witam,

mam zapytanie do bazy danych:

  1. SELECT *
  2. FROM `grades`
  3. INNER JOIN `subjects`
  4. ON grades.subjectId = subjects.subjectId
  5. WHERE userId = '1'
  6. ORDER BY 'gradeValue' DESC


Zapytanie wykonuje się, natoniast wyniki od góry w kolumnie gradeValue to:
5,
6,
6,
3,5,
4,5 itd.

Dlaczego tak się dzieje? Czy ktoś mógłby mnie nakierować?

Pozdrawiam,
mlawnik


--------------------
Pozdrawiam,
mlawnik

Cytat(nospor)
Jedzmy gówno.... miliony much nie może się przecież mylić
Go to the top of the page
+Quote Post
in5ane
post 15.06.2013, 13:28:05
Post #2





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

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


Próbowałeś kombinować coś w ten sposób?
  1. SELECT *
  2. FROM `grades` AS asd
  3. INNER JOIN `subjects`
  4. ON grades.subjectId = subjects.subjectId
  5. WHERE userId = '1'
  6. ORDER BY 'asd.gradeValue' DESC


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
mlawnik
post 15.06.2013, 13:29:29
Post #3





Grupa: Zarejestrowani
Postów: 455
Pomógł: 49
Dołączył: 12.04.2010

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


EDIT:

Dobra problem rozwiązany.
Dla potomnych:

Jeżeli chcemy, aby zapytanie z inner join zostało posortowane, oprócz kolumny należy określić tabelę:

  1. SELECT *
  2. FROM `grades`
  3. INNER JOIN `subjects`
  4. ON grades.subjectId = subjects.subjectId
  5. WHERE userId = '1'
  6. ORDER BY grades.gradeValue DESC


EDIT 2:
Dzięki in5ane, wpadłem na to w tej samej chwili. W sumie stackoverflow twoim przyjacielem tongue.gif Pomógł leci.

Ten post edytował mlawnik 15.06.2013, 13:31:19


--------------------
Pozdrawiam,
mlawnik

Cytat(nospor)
Jedzmy gówno.... miliony much nie może się przecież mylić
Go to the top of the page
+Quote Post
mmmmmmm
post 15.06.2013, 15:17:57
Post #4





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Dla potomnych:
NIGDY NIE DAJEMY NAZWY KOLUMNY DO SORTOWANIA W APOSTROFACH. (i to był twój błąd)
Bo te oznaczają tekst. Więc dla każdego rekordu brana była wartość 'gradeValue' (ten tekst) i porównywana do tekstu 'gradeValue' z poprzedniego rekordu...
Nie musimy kolumny prefiksować nazwą tabeli, o ile jest ona unikalna w ramach tabel (podselektów), z których korzystamy. Dopiero, gdy nazwy kolumn się powtarzają to nalezy prefiksować. Zarówno w SELECT, ORDER BY, jak i we WHERE.
Dodatkowo w MySQL przy ORDER BY trzeba pamiętać, że sortuje wg nazw kolumn zwracanych.
Czyli np. SELECT Abs(liczba) As liczba FROM tabela ORDER BY liczba
w rzeczywistości posortuje po Abs(liczba)
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: 14.08.2025 - 06:46