Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Sortowanie dwóch tabeli
Forum PHP.pl > Forum > Przedszkole
zavada
Witam,
mam problem, usiłuję od kilku chwil stworzyć zapytanie, które sortowałoby wyniki według ilości rekordów w innej tabeli. Dokładniej mówiąc, mam dwie tabele: reports i students. Chcę posortować tabelę reports według ilości rekordów z tabeli students, gdzie reports.id = students.school_id...

Próbowałem zapytań z LEFT JOIN students ON reports.id = students.school_id ORDER BY COUNT(*) ASC i wielu innych, ale nie dawałem rady sad.gif

Kod
reports:
id  |   name      | ...
1   | Gimnazjum   | ...
2   | Szkoła      | ...
3   | Technikum   | ...
4   | Gimnazjum   | ...

students:
id  | school_id |   name   | ...
1   |     1     |  Janek   | ...
2   |     1     |  Alicja  | ...
3   |     2     |  Tomek   | ...
4   |     2     |  Jakub   | ...
5   |     2     |  Alicja  | ...
6   |     3     |  Jakub   | ...
7   |     4     |  Tomek   | ...


Dla wyżej podanych przykładów chcę, aby zapytanie zwróciło mi coś w stylu, oczywiście posortowane według ASC lub DESC:
Kod
id  | students | ...
1   |    3     | ...
2   |    2     | ...
3   |    1     | ...
4   |    1     | ...


W związku z tym proszę o pomoc smile.gif

Pozdrawiam,
zavada
tolomei
Witaj.

Rozumiem, że chcesz policzyć ilość studentów z każdej ze szkół i posortować szkoły od najbardziej liczebnej do najmniej liczebnej.

  1. SELECT r.name, SUM(s.id) amount
  2. FROM reports r, students s
  3. WHERE r.id = s.school_id
  4. GROUP BY r.name
  5. ORDER BY amount DESC


Nie jestem na 100% pewien czy zadziała bo trzeba przetestować.
Jak coś to pisz.

Pozdrawiam.
zavada
Twoje zapytanie prawie działa, po poprawce jest mały problem, bo pokazuje:

school_name amount
Szkoła Podstawowa nr 26 w Krakowie 98
Liceum Ogólnokształcące nr 5 w Krakowie 90
Technikum nr 13 w Krakowie 82
Zespół Szkół nr 1 w Krakowie 80
Gimnazjum nr 23 w Krakowie 74
Szkoła Podstawowa nr 151 w Krakowie 30
Gimnazjum nr 21 w Krakowie 11


a w tych szkołach nie ma przypisane aż tylu uczniów.
tolomei
Czy to coś zmienia?

  1. SELECT r.id, r.name, SUM(s.id) amount
  2. FROM reports r, students s
  3. WHERE r.id = s.school_id
  4. GROUP BY r.id
  5. ORDER BY amount DESC
zavada
Niestety nie. Próbowałem dać tak jak tutaj GROUP BY ...id ale to też nic nie daje.



EDIT:
Teraz działa, zamiast SUM() dałem COUNT() i jest ok smile.gif Dziękuję za pomoc!
tolomei
Ahhh oczywiście...
Nie wiem skąd mi się to wzięło...
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.