Aranjare / afisare date din Select in mai multe tabele

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
Avatar utilizator
trif
Mesaje:500

Aranjare / afisare date din Select in mai multe tabele

salut, am si eu o problema si nu stiu sa ii dau de cap, am urmatoarele bd:
elevi:

Cod: Selectaţi tot

$cnp = $_GET['cnp'];
$nume_prenume = $_GET['nume_prenume'];
$query="SELECT * FROM studenti
INNER JOIN note
ON studenti.cnp = note.cnp
INNER JOIN discipline
ON discipline.id_disciplina = note.id_disciplina
INNER JOIN profesori
ON discipline.id_profesor = profesori.id_profesor ";
echo '<br>';
echo $query;
$result=mysql_query($query);
$rand=mysql_fetch_array($result);

echo '<br><br>Semestru '.$rand['semestru'].'  <br>
Nume elev: '.$rand['nume'].' 
<br><br>
Disciplina----------------Profesor---------Nota<br>
'.$rand['denumire'].'  ---- '.$rand['nume'].' '.$rand['prenume'].' ---- '.$rand['valoare'].' ';
 
ceea ce vreau este urmatoarele:

Cod: Selectaţi tot

nume elev

semestru 1:
disciplina1------------------profesor1--------nota1--nota2--nota3
disciplina2------------------profesor2--------nota1--nota2--nota3
disciplina3------------------profesor3--------nota1--nota2--nota3
disciplina4------------------profesor4--------nota1--nota2--nota3

semestru 2:
disciplina1------------------profesor1--------nota1--nota2--nota3
disciplina2------------------profesor2--------nota1--nota2--nota3
disciplina3------------------profesor3--------nota1--nota2--nota3
disciplina4------------------profesor4--------nota1--nota2--nota3
nu stiu ce sa fac ca sa imi dea asa cum vreau eu. astept raspuns, multumesc antipat. cu stima trif
M-am hotarat!
De ce sa fiu trist?
Oricum nu intereseaza pe nimeni...!
Mai bine sunt fericit si ii enervez pe toti cu fericirea mea!
http://www.cantaricrestine.ro
---> cu stima Trif

claUdiu Mesaje:313
Iti da vreo erroare? Sau ce nu-ti afiseaza bine? De ce nu faci un table cu border="0"?
Se spune ca...."omul tot invata in viata". Dar...Totusi...Trebie sa ne oprim undeva, nu?

trif Mesaje:500
salut, nu imi da nici o eroare. imi afiseaza doar prima informatie din primul semestru si atat. cum se vede mai sus sunt grupate. eu vreau ca sa imi apara grupate pe elev, an, semestru si disciplina. in ordinea asta. si nu fac tabel momentan ca sa nu fie prea mult cod, cand imi da rezultatele dorite imi fac si tabel. asta nu stiu ca sa fac, exact cum arata acolo. cum pun WHERE si unde ca sa imi grupeze pe an, semestru si discipline. specific ca in bd am grupate cum trebuie dar afisarea nu o stiu cum sa o fac. sper ca ati inteles. cu stima trif
M-am hotarat!
De ce sa fiu trist?
Oricum nu intereseaza pe nimeni...!
Mai bine sunt fericit si ii enervez pe toti cu fericirea mea!
http://www.cantaricrestine.ro
---> cu stima Trif

MarPlo Mesaje:4343
Salut
E destul de complicat ce vrei, si depinde mult de felul cum sunt returnate datele din baza de date. Fiind atatea uniri din 4 tabele, poate sa existe conflict /redenumire la numele coloanelor; de exemplu coloana "nume" la tabelul cu elevi si profesori, fiindca nu poti avea in rezultatele returnate doua coloane cu aceeasi denumire.
Ca sa vezi si sa fii sigur de randurile returnate, e bine sa testezi acel Select in PhpMyAdmin.

Urmatoarea parte dificila e aranjarea datelor returnate. Ca sa obtii ce vrei, trebuie sa le aranjezi intr-un array cu 3 dimensiuni, apoi sa-l parcurgi cum e in urmatorl exemplu.

Cod: Selectaţi tot

<?php
// ...
$elev = array();
$i = 0;
while($rand=mysql_fetch_array($result)) {
  $elev[$rand['nume']] = array(
    $rand['semestru']=>array(
      $i=>array('disciplina'=>$rand['denumire'], 'profesor'=>$rand['nume_pro'].$rand['prenume'], 'nota'=>$rand['valoare']))
  );
  $i++;
}

// Exemplu array rezultat pt "elv1"
$elev['elv1'] = array(
  1=>array(
    0=>array('disciplina'=>'dsp1', 'profesor'=>'pro1', 'nota'=>'v1'),
    1=>array('disciplina'=>'dsp2', 'profesor'=>'pro2', 'nota'=>'v2'),
    2=>array('disciplina'=>'dsp3', 'profesor'=>'pro3', 'nota'=>'v3')
  ),
  2=>array(
    0=>array('disciplina'=>'dsp1', 'profesor'=>'pro1', 'nota'=>'v1'),
    1=>array('disciplina'=>'dsp2', 'profesor'=>'pro2', 'nota'=>'v2'),
    2=>array('disciplina'=>'dsp3', 'profesor'=>'pro3', 'nota'=>'v3')
  )
);

// parcurgege si afisare date array
$reout = '';
foreach($elev AS $elv=>$semestru) {
  $reout .= '<br/>'.$elv;
  foreach($semestru AS $nrs=>$arrs) {
    $reout .= '<br/>Semestru '.$nrs;
    for($i=0; $i<count($arrs); $i++) {
      $reout .= '<br/>'.$arrs[$i]['disciplina']. '------'. $arrs[$i]['profesor']. '-----'. $arrs[$i]['nota'];
    }
    $reout .= '<br/>';
  }
}
echo $reout;
?>
- Daca testezi partea cu array-ul dat exemplu si parcurgerea lui, afiseaza asemanator cum ai aratat mai sus.

trif Mesaje:500
salut, multumesc pentru raspuns. am inteles ca este ceva mai complicat, de aceea am cerut ajutor. eu doresc ca atunci cand intru pe o pagina sa imi dea info doar pentru un elev nu pentru toti, cum este scriptul de mai sus care nici nu functioneaza bine. eu vreau ca atunci cand am in bara

Cod: Selectaţi tot

index.php?cnp=2840416207882
sa imi apara doar de la elevul cu CNP-ul acesta. si faza este ca codul de mai jos imi afiseaza asta

Cod: Selectaţi tot

 NUME1
Semestru 2
-----------
NUME2
Semestru 2
-----------
...
nu imi arata disciplina si prof si notele. nu stiu de ce. oare nu se preia de la

Cod: Selectaţi tot

while($rand=mysql_fetch_array($result)) {
  $elev[$rand['nume']] = array(
    $rand['semestru']=>array(
      $i=>array('disciplina'=>$rand['denumire'], 'profesor'=>$rand['nume_pro'].$rand['prenume'], 'nota'=>$rand['valoare']))
  );
  $i++;
}
si faza este ca nici eroare nu imi da. nu stiu de ce. astept raspuns. multumesc inca o data pentru raspuns. cu stima trif
M-am hotarat!
De ce sa fiu trist?
Oricum nu intereseaza pe nimeni...!
Mai bine sunt fericit si ii enervez pe toti cu fericirea mea!
http://www.cantaricrestine.ro
---> cu stima Trif

MarPlo Mesaje:4343
Am incercat la putinul cat ma pricep.
Nu stiu daca acel Select e bun (ma depaseste), m-am referit cu exemplu la aranjarea datelor returnate, apreciind ca acele multiple JOIN returneaza randurile cu datele pe care le vrei. Incearca sa vezi in phpMyAdmin ce randuri returneaza acea Comanda Select (ii aplici un "echo $query;" si folosesti acel sir in PhpMyAdmin).
De asemenea, poti vedea cu var_export($elev); ce contine acel array.
Eventual poti posta aici aceste rezultate, si randurile returnate in PhpMyAdmin.

trif Mesaje:500
salut, in primul rand vreau ca sa va pun tabele ca sa intelegeti mai bine:
tabelul elevi:

Cod: Selectaţi tot

cnp --- nume
tabelul clasa:

Cod: Selectaţi tot

id_clasa --- denumire
tabelul discipline:

Cod: Selectaţi tot

id_disciplina --- denumire --- id_clasa --- semestru --- id_profesor
tabelul note:

Cod: Selectaţi tot

cnp --- id_disciplina --- valoare
tabelul profesori:

Cod: Selectaţi tot

id_profesor --- nume_prof --- prenume
aceste sunt tabele si faza este ca am facut INNER JOIN intre aceste tabele. am incercat cum ai zis tu, dar nu imi da nici un rezultat. se poate sa fac pe bucati? de exemplu sa selectez anul, semestru, discipline, note, profesor dupaia sa le grupez? adica am incercat asta dar nu merge dar intreb ca daca se poate sa stiu ca daca nu am reusit eu nu inseamna ca nu merge. multumesc pentru raspuns, cu stima trif
M-am hotarat!
De ce sa fiu trist?
Oricum nu intereseaza pe nimeni...!
Mai bine sunt fericit si ii enervez pe toti cu fericirea mea!
http://www.cantaricrestine.ro
---> cu stima Trif

evident Mesaje:168
uite aici trif http://www.evi.comuv.com
e site cu anunuri facut de mine.daca am inteles bine u vrei sa iti afiseze din bd informatii despre un anumit elev nu?
intra in site acolo si vezi daca e ceea ce vrei si u.
cand dau clic pe un anunt ma duce la pagina anunt.php?id=2 de exemplu si imi preia din baza de date toate anunturile care au id-ul 2. asa poti face si u cu cnpul.daca e ceea ce cauti posteaza aici si inti voi arata:)

trif Mesaje:500
salut, multumesc pentru raspuns, ceea ce ai facut u acolo este ceva simplu, nu este exact ceea ce imi trebuie, este mult mai complicat. este ca si un catalog de note in care vezi intreaga situatie scolara a unui elev. cu stima trif
M-am hotarat!
De ce sa fiu trist?
Oricum nu intereseaza pe nimeni...!
Mai bine sunt fericit si ii enervez pe toti cu fericirea mea!
http://www.cantaricrestine.ro
---> cu stima Trif

keenbr Mesaje:44
Nush daca e ceea ce vrei dar ai putea incerca asta... conditia e sa ai cnp in toate tabelele ca sa poti face extrage corect datele...
Daca nu , le iei babeste :D
$profesor ... select profesor from ... where cnp=cnp
$elev ... select elev from studenti where cnp=cnp
.....

Cod: Selectaţi tot

$cnp = $_GET['cnp'];
$rand=mysql_fetch_array(mysql_query("SELECT nume, profesor, ... from studenti,profesor... where cnp='".$cnp."'"));

print $rand[0]; //nume
print $rand[1]; // profesor
......

trif Mesaje:500
salut, nu trebuie sa am in cnp in fiecare tabel deoarece se leaga intre ele. de exemplu:
elev cu note se leaga prin cnp, note cu discipline se leaga prin id_disciplina, profesori cu discipline se leaga cu id_profesor, clasa cu disciplina se leaga cu id_clasa. si faza este ca se extrage exact si se fac legaturile intre ele ci trebuie sa fie o corespondenta corecta. si faza este ca este o corespodenta si o legatura ok intre tabele dar nu stiu cum sa fac sa imi afiseze ceea ce imi trebuie mie. multumesc pentru ajutor. apropo prob acesta este o provocare pentru multi. mai astept raspunsuri. cu stima trif
M-am hotarat!
De ce sa fiu trist?
Oricum nu intereseaza pe nimeni...!
Mai bine sunt fericit si ii enervez pe toti cu fericirea mea!
http://www.cantaricrestine.ro
---> cu stima Trif

evident Mesaje:168
da nu poti face daca ai de ex
elev.php?cnp=1900654533234&id=12&disciplina=matematica
si sa dai cu GET
nu se poate asa?:D

Subiecte similare