Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Unde e recomandat sa ma cazez in ...

Descarcator de supratensiune tip 2

ping digi?

Reparare "șanțuri&#...
 De ce i se zice Mariei "Stapa...

Colet valoare Londra București

BMW seria 3 rulat vs SsangYong Ko...

Share abonament Netflix
 Cum pot sa fac rost de un negativ...

Lant Bicicleta

Un designer artist: Raymond Loewy

ATS din contactor modular
 Parere apartament ~150k

Limitare la 100mb/s

Altercație

Cartonașe și stickere t...
 

Display linie cu linie in functie de key-ul din query

- - - - -
  • Please log in to reply
5 replies to this topic

#1
ddezu

ddezu

    New Member

  • Grup: Members
  • Posts: 10
  • Înscris: 20.03.2009
Salutare.

Am urmatoarea problema / nelamurire.

Se dau 3 tabele
tabel1 contine urmatoarele campuri:
ID | nr_factura  |  reg_nr  |  data_emitere  |  drop_client_var  |  oras_client |  .... etc ... | user_acces

tabel2 contine urmatoarele campuri:
uniqueid  |  nr_factura  |  nr_inregistrare  |  tip_introducere  |  r_date |  .....etc ....  |

tabel3 contine urmatoarele campuri:
uniqueid  |  nr_factura  |  nr_inregistrare  |  tip_introducere  |  r_date |  .....etc ....  |
In momentul scrierii tabelului1 se completeaza automat si datele in tabelul 2 si 3 de ex: t1.nr_factura = t2.nr_factura = t3.nr_factura

La partea de selectie am urmatoarea problema
Vreau ca selectia generala sa ramana in picioare (in T1 nu se va repeta linia "nr_factura") si sa selecteze pe baza de nr.factura si din tabelul T2 si T3 dupa care vreau sa imi retuneze valorile linie cu linie pe baza campului t1.reg_nr

$query=mysql_query("SELECT * FROM t1 ,t2 ,t3");
$number_of_products = mysql_numrows($query);
while($row = mysql_fetch_array($query))
{

$t1_nr_factura = $row["nr_factura"];
$t1_reg_nr = $row["reg_nr"];
$t1_data_emitere = $row["data_emitere"];

$t2_nr_factura = $row["nr_factura"];
$t2_reg_nr = $row["nr_inregistrare"];
$t2_data_emitere = $row["tip_introducere"];

$t3_nr_factura = $row["nr_factura"];
$t3_reg_nr = $row["nr_inregistrare"];
$t3_data_emitere = $row["tip_introducere"];

}
mysql_close();

Intrebarea este cum fac ca sa imi selecteze toate randurile unde am nr_inregistrare iar cand trece la al 2`lea rand sa imi declare al 2`lea nr_inregistrare si tot asa mai departe ?

#2
GeorgeGeo

GeorgeGeo

    Active Member

  • Grup: Members
  • Posts: 1,066
  • Înscris: 01.05.2007
Scrie un exemplu fictiv cu trei inregistrari si arata cum iti afisaza raspunsul si cum ai vrea sa-ti afiseze. Chiar daca in POST trebuia sa fie vorba de PHP , nu myswl.

CONCRET !

Edited by GeorgeGeo, 03 September 2010 - 21:50.


#3
ddezu

ddezu

    New Member

  • Grup: Members
  • Posts: 10
  • Înscris: 20.03.2009

View PostGeorgeGeo, on 3rd September 2010, 21:47, said:

Scrie un exemplu fictiv cu trei inregistrari si arata cum iti afisaza raspunsul si cum ai vrea sa-ti afiseze. Chiar daca in POST trebuia sa fie vorba de PHP , nu myswl.

CONCRET !

Salut.

Am sa atasez in 2 imagini cam ce vreau sa fac.
Continutul din mysql este urmatorul (T1 , T2 , T3) cu diferite exemple
Attached File  query_dbf.jpg   54.73K   18 downloads

Rezultat am nevoie sa fie afisat ca si structura exact ca in imaginea alaturata
Attached File  query_dbf_result.jpg   35.49K   14 downloads

#4
GeorgeGeo

GeorgeGeo

    Active Member

  • Grup: Members
  • Posts: 1,066
  • Înscris: 01.05.2007
1) Nu iti trebuie sa ai trei tabele in mysql .

Un singur tabel in care ai: ID | nr_factura  |  reg_nr  |  tip_introducere  | data_emitere  |  drop_client_var  |  oras_client |  .... etc ...

2)

$db=deschide_mysql();

$result = mysql_query("SELECT t.nume,t.factura,t.numar inregistrare,t.adresa,t.telefon,t. oras   etc...     FROM t  ORDER BY t.nume",$db);

$row = mysql_fetch_array( $result );

Asta i-ti va genera primul tabel

Pentru al doilea selectezi altceva in lista aia ce vrei sati afiseze

Exemplu de afisare:

echo "<table width=\"400\" class=\"style9\" align=\"left\" border=\"0\" cellpadding=\"3\" cellspacing=\"2\">";

echo "<tr><td bgcolor=\"AntiqueWhite\">";
echo "Nume:</td><td bgcolor=\"AliceBlue\"><B><font size=4 color=blue>";
echo $row['nume'];
echo "</font></B></td></tr>";
echo "<tr><td bgcolor=\"AntiqueWhite\">";
echo "Factura:</td><td bgcolor=\"AliceBlue\"><B>";
echo $row['nr_factura'];
echo "</B></td></tr><tr><td bgcolor=\"AntiqueWhite\">";
echo "Numar Inregistrare:</td><td bgcolor=\"AliceBlue\"><B>";
echo $row['reg_nr'];
echo "</td></tr>";    
echo "</table>";
echo "<br><br><br><br><br>";
echo "<table width=\"750\" class=\"style9\" align=\"left\" border=\"0\" cellpadding=\"0\" cellspacing=\"5\">";
echo "<tr><td bgcolor=\"AntiqueWhite\">";
echo "Adresa:</td><td bgcolor=\"AliceBlue\" align=\"center\"><I><font size=4 color=blue>";
echo $row['adresa'];



si asa mai departe

Edited by GeorgeGeo, 03 September 2010 - 23:57.


#5
bgMiKe

bgMiKe

    Junior Member

  • Grup: Members
  • Posts: 149
  • Înscris: 28.01.2006

View Postddezu, on 3rd September 2010, 20:44, said:

Am urmatoarea problema / nelamurire.
Se dau 3 tabele
La partea de selectie am urmatoarea problema
Vreau ca selectia generala sa ramana in picioare (in T1 nu se va repeta linia "nr_factura") si sa selecteze pe baza de nr.factura si din tabelul T2 si T3 dupa care vreau sa imi retuneze valorile linie cu linie pe baza campului t1.reg_nr

Intrebarea este cum fac ca sa imi selecteze toate randurile unde am nr_inregistrare iar cand trece la al 2`lea rand sa imi declare al 2`lea nr_inregistrare si tot asa mai departe ?

Ma insel eu, sau deja ai mai pus intrebarea intr-un alt subiect la finalul caruia ziceai:

Quote

Am rezolvat prin mutarea datelor intr`un singur tabel .... T1 + T2 + T3 = T4 si am facut dupa aia de acolo query general.

Din puctul meu de vedere e fix aceeasi problema (e drept cu datele schimbate dar din punct de vedere al interogarilor ... tot la asa ceva se rezuma).

1. Posibila solutie:
S-ar putea sa existe si alte solutii, mai "elegante", dar pentru inceput, cel putin, o poti incerca pe aceasta. Potrivit spuselor tale, in T1, numar factura este cheie primara (sau, daca vrei, numarul facturii este unic) iar in celelalte 2 tabele, T2 si T3 ai 1 sau mai multe inregistrari peentru fiecare factura din T1. Deci:
- faci un select doar pe T1 din care preiei numar_factura si eventual ce mai ai nevoie. Datele respective le poti salva intr-un array - de exemplu;
- apoi pentru fiecare linie din array (adica pentru fiecare factura) preiei informatiile de care ai nevoie din T2 si T3. Merg pe varianta in care datele din T2 si T3 se pun in acelasi array pentru a usura afisarea. La fel de bine insa poti avea 3 array-uri. Depinde de tine cum ti se pare mai comod/usor.

1. conectare la baza de date;
2. preluare inregistrari din T1 (sa presupunem ca ai n1 inregistrari si c1 coloane);
3. salvare rezultat in array (rezultat[1 la n1, 1 la c1 + 2] adica n1 linii si c1 + 2 coloane pentru ca vei adauga cate o coloana - care la randul ei ste un array pentru T2 si respectiv T3); 
4. pentru fiecare linie din array (i = 1 la n1):
	4.1. preiei numarul de inregistrari din T2 (n2) respectiv inregistrarile propriu-zise care tin de factura curenta (linia curenta din array) - sa presupunem ca te intereseza c2 coloane;
	4.2. le adaugi in array (rezultat[i , c1+1] = array[1 la n2, 1 la c2]);
	4.3. preiei numarul de inregistrari din T3 (n3) respectiv inregistrarile propriu-zise care tin de factura curenta (linia curenta din array) - sa presupunem ca te intereseza c3 coloane;
	4.4. le adaugi in array (rezultat[i , c1+2] = array[1 la n3, 1 la c3]);
5. inchizi conexiunea
6. afisezi arrayul;


2. Ca o parere personala si, mai departe, un sfat personal n-ar strica sa-ti arunci un ochi pe proiectarea bazelor de date, mai ales partea de normalizare (macar 1 si 2). Asta cu atat mai mult cu cat tu esti cel care a proiectat acea baza de date.
Ca sa ma refer si la cealalta discutie, nu-ti organizezi tabelele dupa cum ti-e mai usor sa faci interogarea, ci le organizezi dupa cu totul alte principii si faci interogarea astfel incat sa-ti returneze ceea ce vrei pornind de la structura stabilita.

Numai bine

LE: Exemplul dat este pentru un tabel in care informatiile din T2 si T3 se adauga in coloane. Daca insa vrei sa le adaugi pe randuri (se poate aplica acelasi cap de table si pentru T2 si pentru T3) atunci, la punctele 4.2. si 4.4. nu mai ai nevoie sa le salvezi in array ci faci direct afisarea.

Edited by bgMiKe, 04 September 2010 - 00:32.


#6
ddezu

ddezu

    New Member

  • Grup: Members
  • Posts: 10
  • Înscris: 20.03.2009
:OK:

Am rezolvat in urmatorul mod:

$query=mysql_query("select * from T1");
while($row = mysql_fetch_array($query))
{
$query2=mysql_query("select * from T2 WHERE tip_introducere = '$incarcare' AND nr_inregistrare = '$factura_reg_nr'");
while($row2 = mysql_fetch_array($query2))
{
}
$query3=mysql_query("select * from T3 WHERE tip_introducere = '$descarcare' AND nr_inregistrare = '$factura_reg_nr'");
while($row3 = mysql_fetch_array($query3))
{
}
}
mysql_close();

multumesc pentru ajutorul acordat si pentru raspunsurile voastre.  :thumbup:

Anunturi

Bun venit pe Forumul Softpedia!

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate