Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/mysql]Oceny w tabeli
Forum PHP.pl > Forum > Przedszkole
aga323
Witam. Robię dzienniczek ucznia. Logowanie, uprawnienia, zarządzanie itd. mam zrobione, tylko teraz meczę sie nad wyświetleniem ocen danego ucznia. Chcę aby wyglądało to mniej więcej tak:
Imię nazwisko
j.polski: 5,3,5,1,4,5
j.niemiecki: 5,4,6,2
matematyka: 3,6,5,6,6
historia: 4,1,1,2,3
itd.

Może przedstawię kawałek kodu, który napisałam.
  1. <?php
  2.  
  3. $sql_conn = mysql_connect("", "", "")
  4. or die (mysql_error());
  5.  
  6.  
  7. or die (mysql_error());
  8. ?>
  9.  
  10. <?php
  11. $oceny = mysql_query("SELECT * FROM przedmioty p right join oceny o on p.id_przedmiotu=o.id_przed
    miotu WHERE o.id_ucznia= 1"
    )
  12. while ($row = mysql_fetch_array($oceny)) {
  13. echo $row['nazwa_przedmiotu'];
  14.  
  15. echo $row['oceny']; 
  16. }
  17. ?>

I po wyświetleniu strony pokazuję mi się:
W - FW - FW - FHistoriaHistoria
Ewentualnie po małych zmianach może pokazywać się
W-F:4, W-F:5, Historia:4 itd.
Ale nie wiem co zrobić żeby mi się wyświetlało tak jak przedstawiłam na początku.
Proszę o pomoc, bo już nie wiem co mam zrobić... sad.gif
href
Kod
<?php
session_start();

$sql_conn = mysql_connect("", "", "")
or die (mysql_error());


mysql_select_db("")
or die (mysql_error());
?>

<?php
$oceny = mysql_query("SELECT * FROM przedmioty p right join oceny o on p.id_przedmiotu=o.id_przedmiotu WHERE o.id_ucznia= 1")
or die(mysql_error());
while ($row = mysql_fetch_array($oceny)) {
echo $row['nazwa_przedmiotu'];

echo "$row['oceny'] \n";
}
?>
aga323
Niestety nie pomogło sad.gif Na dodatek teraz wyskakuje błąd:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /var/www/sites/yoyo.pl/g/2/g2test/stopnie.php on line 18
Może ma ktoś jeszcze jakiś pomysł, aby rozwiązać ten problem??
=kokos=
podaj struktury tych tabel z których chcesz wyświetlić dane.
spróbuj w taki sposób.

  1. <?php
  2. $przedmioty = mysql_query("pokaż przedmioty gdzie id_ucznia=..."); 
  3.  
  4. while ($row = mysql_fetch_assoc($przedmioty)) {
  5.  
  6. echo '<br />'.$row['nazwa_przedmiotu'].' :';
  7.  
  8. $oceny = mysql_query("pokaż oceny gdzie id_ucznia=... i przedmiot=$row['nazwa_przedmiotu']");
  9.  
  10. while ($wiersz = mysql_fetch_assoc($oceny)) {
  11.  
  12. echo $wiersz['ocena'];
  13.  
  14. }
  15.  
  16. }
  17. ?>
aga323
Struktura tabel u mnie wygląda tak:
przedmioty
id_przedmiotu, nazwa_przedmiotu
users
id, login, nazwisko, klasa
oceny
id_ucznia, id_przedmiotu, ocena

Później mam jeszcze dodatkowe tabele ale one tyczą się spaw w tej kwestii nieistotnych takich jak uprawnienia itd.
=kokos=
  1. <?php
  2.  
  3. $przedmioty = mysql_query("SELECT * FROM przedmioty;");
  4.  
  5. while($row = mysql_fetch_assoc($przedmioty)) {
  6.  
  7. echo '<br />'.$row['nazwa_przedmiotu'].': ';
  8. $id = $row['id_przedmiotu'];
  9.  
  10. $oceny = mysql_query("SELECT ocena FROM oceny WHERE oceny.id_ucznia=questionmark.gif AND oceny.id_przedmiotu=$id;"); 
  11. // tam gdzie znaki zapytania wstaw jakaś zmienną sesyjną, którą przypisujesz podcz
    as logowania.
  12.  
  13. while($wiersz = mysql_fetch_assoc($oceny)) {
  14.  
  15. echo $wiersz['ocena'].', ';
  16.  
  17. }
  18. }
  19.  
  20. ?>
aga323
guitar.gif Jeee udało się biggrin.gif Kokos na prawde bardzo Ci dziękuję laugh.gif

Tylko teraz mam problem, bo np. trzecie klasy nie mają informatyki i techniki. Co zroibc aby te przedmioty im się nie wyświetlały?
=kokos=
Można zrobić tak żeby np. wyświetlało tylko te przedmioty w których są wystawione jakieś oceny (jeśli uczeń nie będzie miał żadnej oceny z jakiegoś przedmiotu to nazwa nie zostanie wyświetlona), albo do tabeli przedmioty dodaj dwie kolumny "OD" ,"DO" gdzie wpisujesz od której klasy do której jest nauczany dany przedmiot (tak chyba będzie lepiej).
aga323
A jakby musiało wyglądać zapytanie z tym od do? Bo jakoś za bardzo nie mogę skumać tego pomysłu...
=kokos=
Tak powinno być okay:
  1. <?php
  2. $przedmioty = mysql_query("SELECT * FROM przedmioty JOIN users WHERE users.klasa>=przedmioty.od AND users.klasa<=przedmioty.do AND users.id=questionmark.gif?;");
  3. ?>
rojmarek
Cytat(=kokos= @ 29.04.2007, 23:57:18 ) *
  1. <?php
  2.  
  3. $przedmioty = mysql_query("SELECT * FROM przedmioty;");
  4.  
  5. while($row = mysql_fetch_assoc($przedmioty)) {
  6.  
  7. echo '<br />'.$row['nazwa_przedmiotu'].': ';
  8. $id = $row['id_przedmiotu'];
  9.  
  10. $oceny = mysql_query("SELECT ocena FROM oceny WHERE oceny.id_ucznia=questionmark.gif AND oceny.id_przedmiotu=$id;"); 
  11. // tam gdzie znaki zapytania wstaw jakaś zmienną sesyjną, którą przypisujesz podcz
    as logowania.
  12.  
  13. while($wiersz = mysql_fetch_assoc($oceny)) {
  14.  
  15. echo $wiersz['ocena'].', ';
  16.  
  17. }
  18. }
  19.  
  20. ?>

takie rozwiązanie nie jest niestety optymalne... przy 40 przedmiotach wygeneruje to 41 zapytań.. zapytanie
  1. SELECT * FROM `oceny` LEFT JOIN `przedmioty`
  2. ON `przedmioty`.`id_przedmiotu`=`oceny`.`id_przedmiotu`
co wygeneruje niezłą tabelke
albo 2 zapytania
  1. SELECT * FROM przedmioty;

i
  1. SELECT * FROM `oceny` ORDER BY `przedmiot_id`

teraz wrzucasz `przedmioty` do jednej tabelki, po id, i lecisz przez `oceny`, i jeżeli aktualne id_przedmiotu jest inne niż poprzednie to wypisujesz nazwe przedmiotu
aga323
eee... bo już się troche pogubiłam.... Czyli jak wtedy powinno wyglądać wyświetlenie tych ocen wg. rojmarka?
rojmarek
Cytat(aga323 @ 30.04.2007, 12:52:48 ) *
eee... bo już się troche pogubiłam.... Czyli jak wtedy powinno wyglądać wyświetlenie tych ocen wg. rojmarka?

dałem 2 rozwiązania, i teraz mozna empirycznie sprwadzić które będzie szybsze...
w sumie jak na początku wyswietlałaś historia-2 historia-4 historia-5, to bardzo łatwo jest to przerobić na historia - 2 4 5...
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.