Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] poprawne wyświetlanie tabeli
Nemesis
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 24.10.2009

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


Witam

Mam mały problem z wyświetlaniem danych w tabelce na stronie.

W bazie mam takie tabele:
UZYTKOWNICY
Id_uzytkownika | Imie | Nazwisko

KLASA
Id_klasa | Jaka_klasa

PRZEDMIOTY
Id_przedmiot | Nazwa_przedmiotu

OCENY
Id_ocena | Oceny

I chcę wyświetlić taką tabelę na stronie:

Nazwisko 1 | Imie 1 | Ocena
----------------------------
Nazwisko 2 | Imie 2 | Ocena
----------------------------
Nazwisko 3 | Imie 3 | Ocena
----------------------------
Nazwisko 4 | Imie 4 | Ocena

ale mam pewien problem.

Zapytanie wyświetlające dane wygląda następująco:
  1. $zapytanie=mysql_query("SELECT uzytkownicy.Imie, uzytkownicy.Nazwisko, oceny.Oceny FROM klasa natural join przedmioty natural join uzytkownicy LEFT JOIN oceny ON uzytkownicy.Id_uzytkownik = oceny.Id_uzytkownik where Jaka_klasa='$klasa' and przedmioty.Nazwa_przedmiotu='$przedmiot' ORDER BY uzytkownicy.Nazwisko");


Jeśli każda osoba ma po jednej ocenie to jest Ok, lecz jeśli ktoś ma więcej ocen, to powtarzane jest Nazwisko, Imię i dopiero ocena:

Nazwisko 1 | Imie 1 | Ocena
----------------------------
Nazwisko 2 | Imie 2 | Ocena
----------------------------
Nazwisko 2 | Imie 2 | Ocena
----------------------------
Nazwisko 3 | Imie 3 | Ocena
----------------------------
Nazwisko 4 | Imie 4 | Ocena

Powinno być:

Nazwisko 1 | Imie 1 | Ocena
----------------------------
Nazwisko 2 | Imie 2 | Ocena | Ocena
----------------------------
Nazwisko 3 | Imie 3 | Ocena
----------------------------
Nazwisko 4 | Imie 4 | Ocena


Wyświetlanie tabeli wygląda następująco:

  1. if(mysql_num_rows($zapytanie) > 0) {
  2. echo "<table cellpadding=\"1\" border=1>";
  3. while($r = mysql_fetch_object($zapytanie)) {
  4. echo "<tr>";
  5. echo "<td>".$r->Nazwisko."</td>";
  6. echo "<td>".$r->Imie."</td>";
  7. echo "<td>".$r->Oceny."</td>";
  8. echo "</tr>";
  9. }
  10. echo "</table>";
  11. }


Niestety nie mogę sobie z tym problemem poradzić by nie powtarzało mi nazwisk i wyświetlało pojedynczo oceny, a wyświetlało jedno nazwisko, imię i kilka ocen obok.
Jeśli ktoś wie w czym tkwi problem to proszę o pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
seth-kk
post
Post #2





Grupa: Zarejestrowani
Postów: 444
Pomógł: 79
Dołączył: 26.05.2009

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


Cytat(Nemesis @ 2.11.2009, 19:55:24 ) *
...Jeśli ktoś wie w czym tkwi problem to proszę o pomoc.

problem tkwi miedzy klawiatura a siedzeniem winksmiley.jpg
sortuj wyniki po id_uzytkownika i nie domykaj tabeli na koncu while tylko na poczatku jesli kolejny przebieg podaje kolejnego uzytkownika


--------------------
Go to the top of the page
+Quote Post
Nemesis
post
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 24.10.2009

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


Wyniki sortuję po Id_uzytkownik, lecz z tym domykaniem tabeli coś nie idzie.
Gdziekolwiek bym tego nie wstawił, rozwala mi całą tabelę lub jej w ogóle nie wyświetla.
Niestety to nadal nie załatwia problemu powtarzających się nazwisk i imion.
Go to the top of the page
+Quote Post
InosU31
post
Post #4





Grupa: Zarejestrowani
Postów: 221
Pomógł: 14
Dołączył: 11.03.2009
Skąd: Lubaczów

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


Nie wiem czy Ci pomoge ale sprobuje napisac jak ja bym probowal ;-)

Otoz:

W tabeli OCENY dodalbym jeszcze jedna kolumne i w niej trzymal id uzytkownikow. Natomiast w tabeli UZYTKOWNICY bym dodal id klasy - bo wydaje mi sie ze warto jakos polaczyc te tabele ze soba. Nastepnie bym zrobil ten warunek ktory dales tylko :

  1.  
  2.  
  3. if(mysql_num_rows($zapytanie) > 0) {
  4. echo "<table cellpadding=\"1\" border=1>";
  5. while($r = mysql_fetch_object($zapytanie)) {
  6. echo "<tr>";
  7. echo "<td>".$r->Nazwisko."</td>";
  8. echo "<td>".$r->Imie."</td>";
  9. $zapytanie2 = mysql_query ("SELECT * FROM oceny WHERE id_usera = \'".$r->Id_uzytkownika."\'");
  10. while ($r = mysql_fetch_object($zapytanie2))
  11. {
  12. echo "<td>".$r->Oceny."</td>";
  13. }
  14. echo "</tr>";
  15. }
  16. echo "</table>";
  17. }
  18.  
  19.  


ewentualnie zamiast drugiero while to moze foreach ? No nie wiem pokombinuj moze cos wymyslisz;-) Nie wiem jak to w praktyce by dzialalo ale teoretycznie bym tak kombinowal;-)

Pozdrawiam

Ps. Acha tylko pierwszy warunek tez musisz zmienic zeby Ci wybral tylko imie i nazwisko usera - zebys wypisal to tylko raz, a mi sie wydaje ze musi byc druga petla do wypisywania ocen (ta ktora dopisalem wyzej) zeby ci dodawalo te pola z ocenami - bo nie kazdy bedzie mial ich tyle samo - chyba ze to dotyczy tylko ocen koncowych to juz troche latwiej bo bys wiedzial ile ich jest.
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 Aktualny czas: 20.08.2025 - 04:26