Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php/mysql]Oceny w tabeli
aga323
post
Post #1





Grupa: Zarejestrowani
Postów: 124
Pomógł: 0
Dołączył: 26.01.2007
Skąd: Oborniki

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


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ć... (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
href
post
Post #2





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 29.04.2007

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


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";
}
?>
Go to the top of the page
+Quote Post
aga323
post
Post #3





Grupa: Zarejestrowani
Postów: 124
Pomógł: 0
Dołączył: 26.01.2007
Skąd: Oborniki

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


Niestety nie pomogło (IMG:http://forum.php.pl/style_emoticons/default/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??
Go to the top of the page
+Quote Post
=kokos=
post
Post #4





Grupa: Zarejestrowani
Postów: 114
Pomógł: 0
Dołączył: 6.08.2006

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


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. ?>
Go to the top of the page
+Quote Post
aga323
post
Post #5





Grupa: Zarejestrowani
Postów: 124
Pomógł: 0
Dołączył: 26.01.2007
Skąd: Oborniki

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


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.
Go to the top of the page
+Quote Post
=kokos=
post
Post #6





Grupa: Zarejestrowani
Postów: 114
Pomógł: 0
Dołączył: 6.08.2006

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


  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=(IMG:http://forum.php.pl/style_emoticons/default/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. ?>
Go to the top of the page
+Quote Post
aga323
post
Post #7





Grupa: Zarejestrowani
Postów: 124
Pomógł: 0
Dołączył: 26.01.2007
Skąd: Oborniki

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


(IMG:http://forum.php.pl/style_emoticons/default/guitar.gif) Jeee udało się (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Kokos na prawde bardzo Ci dziękuję (IMG:http://forum.php.pl/style_emoticons/default/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?

Ten post edytował aga323 30.04.2007, 10:54:23
Go to the top of the page
+Quote Post
=kokos=
post
Post #8





Grupa: Zarejestrowani
Postów: 114
Pomógł: 0
Dołączył: 6.08.2006

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


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).

Ten post edytował =kokos= 30.04.2007, 12:48:34
Go to the top of the page
+Quote Post
aga323
post
Post #9





Grupa: Zarejestrowani
Postów: 124
Pomógł: 0
Dołączył: 26.01.2007
Skąd: Oborniki

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


A jakby musiało wyglądać zapytanie z tym od do? Bo jakoś za bardzo nie mogę skumać tego pomysłu...
Go to the top of the page
+Quote Post
=kokos=
post
Post #10





Grupa: Zarejestrowani
Postów: 114
Pomógł: 0
Dołączył: 6.08.2006

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


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=(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ?;");
  3. ?>
Go to the top of the page
+Quote Post
rojmarek
post
Post #11





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 10.09.2005

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


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=(IMG:http://forum.php.pl/style_emoticons/default/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
Go to the top of the page
+Quote Post
aga323
post
Post #12





Grupa: Zarejestrowani
Postów: 124
Pomógł: 0
Dołączył: 26.01.2007
Skąd: Oborniki

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


eee... bo już się troche pogubiłam.... Czyli jak wtedy powinno wyglądać wyświetlenie tych ocen wg. rojmarka?
Go to the top of the page
+Quote Post
rojmarek
post
Post #13





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 10.09.2005

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


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...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 18.09.2025 - 09:05