Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Równoległe sortowanie dwóch kolumn
Forum PHP.pl > Forum > Przedszkole
JankesZiom
W bazie mam 3 tabele: wykonawca, zespół i płyta.
W tabeli płyta jest zarówno id wykonawcy i zespołu w zależności od rodzaju produkcji, więc jedno z tych pół zawsze jest puste.

  1. SELECT p.tytul, w.imie, z.nazwa FROM plyta p
  2. LEFT JOIN wykonawca w ON p.wykonawca_id=w.wykonawca_id
  3. LEFT JOIN zespol z ON p.zespol_id=z.zespol_id
  4. ORDER BY questionmark.gif?


Jak (czy w ogóle da się) wykonać sortowanie zarówno po nazwie zepołu jak i imieniu wykonawcy? Tzn. jeżeli nie ma wykonawcy to sprawdz czy jest zespół i na odwrót.
tolomei
Witaj.
Po "ORDER BY" możesz podać dwie i więcej kolumn rozdzielonych przecinkami.
JankesZiom
Tak, ale wtedy pierwszeństwo będzie wg kolejność, czyli jeżeli dam: z.nazwa ASC, w.imie ASC wyjdzie:

|-wyk-|-zes-
1| a |------
2| c |------
3| d |------
4| g |------
5|------| b
6|------| e
7|------| f

Natomiast mi chodzi o:

|-wyk-|-zes-
1| a |--------
2|------| b
3| c |--------
4| d |--------
5|------| e
6|------| f
7| g |-------
jaslanin
Myślę że bardziej sensowne będzie:

  1. SELECT p.tytul, COALESCE(w.imie, z.nazwa) nazwa FROM plyta p
  2. LEFT JOIN wykonawca w ON p.wykonawca_id=w.wykonawca_id
  3. LEFT JOIN zespol z ON p.zespol_id=z.zespol_id
  4. ORDER BY nazwa


Niemniej jednak możesz i tak:

  1. SELECT p.tytul, w.imie, z.nazwa FROM plyta p
  2. LEFT JOIN wykonawca w ON p.wykonawca_id=w.wykonawca_id
  3. LEFT JOIN zespol z ON p.zespol_id=z.zespol_id
  4. ORDER BY IF (ISNULL(w.imie), z.nazwa, w.imie)
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.