Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Sortowanie wyników z wykonanego wcześniej zapytania
Forum PHP.pl > Forum > Przedszkole
LewyM1
Witam, próbuję sortować dane z wcześniej otrzymanego wyniku. Wygląda to tak:
Mam tabelę ulubione

Kod
+----+---------+-------------+
| id | user_id | ulubiony_id |
+----+---------+-------------+
| 1  | 1       | 2           |
+----+---------+-------------+
| 2  | 1       | 3           |
+----+---------+-------------+
| 3  | 2       | 3           |
+----+---------+-------------+


i uzytkownik z user_id i nazwiskiem

Chcę sprawdzić ulubionych użytkowników user'a_id np. "1" i z tabeli "uzytkownik" i wyświetlić wynik w kolejności alfabetycznej pola "nazwisko" z tabeli "uzytkownik".
Podacie mi jakieś wskazówki? Umiem sortować dane, ale nie jak zrobić zapytanie z wyników innego zapytania.
Pozdrawiam.
aachi
Nie wiem czy o to Ci chodzi, ale może na coś Cię to nakieruje:
  1. SELECT a.ulubiony_id, b.nazwisko FROM ulubione AS a LEFT JOIN uzytkownik AS b ON a.ulubiony_id=b.user_id WHERE a.user_id=1 ORDER BY b.nazwisko ASC


To zapytanie powinno wyświetlać ulubionych użytkownika o user_id=1 posortowane według nazwiska. Pisałem bez sprawdzania, ale chyba nie zrobiłem żadnego błędu. O to Ci chodziło?
LewyM1
Hmmm, nie za bardzo rozumiem te zapytanie.
Zrobiłem zapytanie na twoim kodzie i coś mi chyba nie wychodzi. Pomimo, że w bazie danych są podani użytkownicy i lista ulubionych to zmienna $liczba_elementow zawsze wynosi 0, a pętla nic nie wyświetla...

Kod
$zapytanie = mysql_query("select a.ulubiony_id from ulubione as a left join uzytkownik as b on a a.ulubiony_id = b.user_id where a.user_id = 1 order by b.nazwisko asc");
$liczba_elementow = mysql_num_rows($zapytanie);
echo $liczba_elementow."<br />";
while ($wiersz = mysql_fetch_assoc($zapytanie)) {
    echo $wiersz['a.ulubiony_id']."|";
}


Powinien być taki wynik:
Kod
2
3|2|
aachi
Nie sprawdzasz czy mysql_query() wykonało się poprawnie. Sprawdź jaki jest błąd (funkcja mysql_error()). W końcu nie widziałem twojej bazy i może jakaś tabela albo pole nazywa się inaczej, albo literówkę popełniłem.... choć na kolejny rzut oka moje zapytanie jest ok.
Jeśli nie wiesz co to LEFT JOIN to możesz zapisać: SELECT ... FROM ulubione, uzytkownik WHERE ulubione.ulubiony_id = uzytkownik.user_id AND ...

Sortować można i po dwóch parametrach: odzielasz je poprostu przecinkiem np ... ORDER BY ulubione.user_id DESC, uzytkownik.nazwisko ASC.

A wynik chyba powinien być:
3
3|2
Przynajmniej tak wynika z tej tabelki co narysowałeś w pierwszym poście.

życzę powodzenia

LewyM1
Poczytałem o LEFT JOIN i wszystko już rozumiem, problem chyba tkwił w "as", a poprawne zapytanie wygląda tak:
Kod
select ulubione.ulubiony_id from ulubione join uzytkownik on ulubione.ulubiony_id = uzytkownik.user_id where ulubione.user_id = 1 order by uzytkownik.nazwisko asc

A tak cały kod
Kod
$zapytanie = mysql_query("select ulubione.ulubiony_id from ulubione join uzytkownik on ulubione.ulubiony_id = uzytkownik.user_id where ulubione.user_id = 1 order by uzytkownik.nazwisko asc");
$liczba_elementow = mysql_num_rows($zapytanie);
echo $liczba_elementow."<br />";
while ($wiersz = mysql_fetch_assoc($zapytanie)) {
    echo $wiersz['ulubiony_id']."|";
}

Dzięki, temat do zamknięcia.
Pozdrawiam.
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.