Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc
Comunitatea PHP Romania
 

Ajutor! Lipsa inspiratie.....!!
Vezi mesajul original

 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> Cod PHP
Subiectul anterior :: Subiectul următor  
Autor Mesaj
Razvan



Data înscrierii: 26/Iun/2003
Mesaje: 5

Trimis: Joi Aug 28, 2003 11:55 am    Titlul subiectului: Ajutor! Lipsa inspiratie.....!!  

Folosind baza de date din dotare fac un "query" care sa-mi afiseze doar anumite inregistrari.

Din baza mare de date query-ul imi afisaza doar anumite serii de produs.

Abia acum apare problema:
Aceste serii vreau sa le compar cu seriile de produs aflate in alt tabel si sa-mi afiseze la final doar ce serii apar intr-o parte iar in cealalta parte nu apar ( ca un fel de inventar).
Datele nu sunt introduse in acceasi ordine in cele 2 tabele (daca are vreo importanta).

Va multumesc anticipat,

Razvan
Sus  
MasterPhoton



Data înscrierii: 06/Mar/2003
Mesaje: 437

Trimis: Joi Aug 28, 2003 12:48 pm    Titlul subiectului: Select = cea mai puternica "instructiune" SQL  

...ceva de genul:
select serie1 from tabel1 where serie 1 not in (select serie2 from tabel2)
----
Cred ca merge asa!
Reply daca DA! (sau daca NU) :)
Sus  
Constantin



Data înscrierii: 20/Sep/2002
Mesaje: 236

Trimis: Joi Aug 28, 2003 1:21 pm    Titlul subiectului:  

Depinde de baza de date, daca e MySQL sub 4.1.0 nu stie de subselecturi.
Sus  
MasterPhoton



Data înscrierii: 06/Mar/2003
Mesaje: 437

Trimis: Vin Aug 29, 2003 12:10 pm    Titlul subiectului:  

Dar asa cred ca merge:
select lista1,lista2 from tabel1,tabel2 where lista1.tabel1 not in lista2.tabel2;
SAU
daca nu si nu faci doua selecturi consecutive:
$lista="(";
$query1=mysql_query("select lista2 from tabel2") or die("EROARE: ".mysql_error());
while(mysql_fetch_array($query1) as $row)
{
$lista.=$row.",";
}
$lista=ereg_replace(",)",")",$lista);
$query2="select lista1 from tabel1 where lista1 not in $lista";
=-=-=-=-
OK?!
Sus  
biban



Data înscrierii: 13/Apr/2003
Mesaje: 204
Locație: Giurgiu

Trimis: Sâm Aug 30, 2003 8:14 pm    Titlul subiectului:  

Gaseshti ceva daca cautzi in documentatzie INNER JOIN sau OUTER JOIN (in functzie de ce vrei sa faci)
Comenzile astea nu mi-au mers pe ORACLE dar merg f. bine pe mysql.
pe ORACLE am folosit ceva de genul cum a spus masterphoton(select lista1,lista2 from tabel1,tabel2 where lista1.tabel1 not in lista2.tabel2;).

Itzi dau un exemplu cu JOIN:
am un tabel codfiscal in care sunt nishte coduri fiscale shi denumirile societatilor shi un tabel in care am codurile fiscfale shi niste sume. vreau sa-mi afisheze denumirile shi sumele (denumirile din tabelul codfiscal shi sumele din tabelul sume):

SELECT sume.codfiscal, codfiscal.denumire,sume.suma FROM sume LEFT OUTER JOIN codfiscal ON codfiscal.codfiscal=sume.codfiscal WHERE codfiscal.codfiscal IS NOT NULL

Daca vreau sa-mi afiseze societatile pt care nu s-a gasit societatea pun la sfarshit IS NULL (in loc de IS NOT NULL).
Sus  
Razvan



Data înscrierii: 26/Iun/2003
Mesaje: 5

Trimis: Lun Sep 01, 2003 10:33 am    Titlul subiectului:  

Se pare ca nu am fost inteles.... :(

Deci..... Am un tabel (mare rau). Pe baza lui fac un query (cu SELECT, normal...) care imi afiseaza (DOAR AFISEAZA, nu salvaza nimic nicaieri) anumite date. Aceste "anumite date" vreau sa le compar cu cele existente in alt tabel si sa-mi afiseze doar diferentele. Nu vreau sa compar tot tabelul pentru ca el contine o cantitate foarte mare de informatie care nu ma intereseaza pentru ce vreau eu sa fac. Sortez datele care ma intereseaza si rezultatul vreau sa-l compar cu datele din tabelul 2.

Sper ca de data asta am fost inteles mai bine....

In alta ordine de idei.... Cum se poate face salvarea in alt fisier (de preferinta .txt) a rezultatului unui query?

Va multumesc anticipat,
Razvan
Sus  
biban



Data înscrierii: 13/Apr/2003
Mesaje: 204
Locație: Giurgiu

Trimis: Mar Sep 02, 2003 11:58 am    Titlul subiectului:  

Pai shi de ce este problematica solutzia noastra???
In loc sa faci doua interogari (una normala shi una anormala) faci o singura interogare dar cu mai multe conditzii.
Foloseshti varianta cu LEFT JOIN (de exemplu) la care bagi conditzia ta de la selectul normal (WHERE ....) la sfarsitul interogarii, shi renuntzi la selectul normal pentru ca sunt incluse aici toate conditziile.
Alta solutzie? nu shtiu daca exista o funtie php care sa compare doua arrayuri (rezultatul mysql_query este un array) pt ca nu cred ca shtie mysql sa faca comparatzia (asha ca sa o faca phpu').Daca nu are phpu' o functie se poate face una simpla, dar cel mai recomandat e interogarea unica.
Daca nu eshti multzumit de raspuns anuntza shi mai "fabric" una :wink: in care foloseshti nishte if-uri in interogare shi obtzii un tabel identic cu cel normal shi inca o coloana cu 1 sau 0.
Sus  
computershop



Data înscrierii: 01/Sep/2003
Mesaje: 19

Trimis: Mie Sep 03, 2003 8:33 am    Titlul subiectului: incearca si asa, mie mi-a mers !  

Incearca sa faci querry-ul in MS Access ca acolo ai graphic tool pentru SQL dupa care vizualizezi codul sursa al SQL si-l copii in programul tau (poate te ajuta). In speta problema ta este cum sa salvezi datele intr-o baza de date temporara care sa existe pina la inchiderea ei. Asta in FoxPro se facea cu instructiunea 'Select *.* into cursor <nume>' si apoi dai 'Select <nume>.*, tabela.* where <nume>.cimp1!=tabela.cimp1 ' dar aici nu stiu cum poti face.
Sus  
biban



Data înscrierii: 13/Apr/2003
Mesaje: 204
Locație: Giurgiu

Trimis: Mie Sep 03, 2003 2:06 pm    Titlul subiectului:  

Imi cer scuze dar nu am fost prea concentrat cand am dat raspunsul anterior shi am complicat problema mai mult decat era necesar.
Colegul nostru, din cate am intzeles are un select care ii genereaza un tabel pe care vrea sa-l compare cu un alt tabel din baza de date (tabelul generat de select nu este temporar shi nici nu trebuie sa fie temporar)
Acum, eu vin shi spun ca in locul selectului normal sa foloseasca un select in care foloseshte clauza left outer join shi ii exeplica de ce:
Selectul cu clauza left outer join ii va genera acelashi tabel ca selectul normal dar va avea o coloana in plus (sau mai multe, daca vrea) care va fi luata din al doilea tabel, iar pe fiecare rand va avea o informatzie din tabelul doi, daca acel rand coincide sau respecta conditziile sau va fi vid daca este diferit.
Exemplu
SELECT col1_tabel1,col2_tabel1,col3_tabel2 FROM tabel1 LEFT OUTER JOIN tabel2 ON col1_tabel1=col8_tabel2 WHERE conditzia_de_la_selectul_normal_sau/shi_alte_conditzii
Ce se va intampla?
Va fi generat un tabel cu cele 3 coloane care va avea toate randurile din tabel1 care indeplinesc conditzia de la WHERE (aceeashi conditzie pe care o avea la selectul normal - asha cum l-a numit colegul nostru), iar pe coloana a treia va fi trecuta informatzia din tabelul2 numai daca este indeplinita conditzia de la clauza ON.Deci toate inregistrarile care au ceva vid in col3 nu se regasesc in tabelul2.
Diferenta dintre acest exemplu shi cel in care nu foloseam left outer join (SELECT col1_tabel1,col2_tabel1,col3_tabel FROM tabel1,tabel2.....) este ca voi primi ca rezultat doar inregistrarile care indeplinesc conditzia pusa la clauza WHERE (deci se regasesc sau nu in tabelul2).
In ceea ce priveshte scrierea intr-un fishie text exista o solutzie simpla: comanda fputs.
Deci parcurgi tabloul rezultat in urma interogarii shi scrii intr-un fishier text fiecare informatzie pe care o doreshti (vezi in documentatzie cum lucreaza comanda fputs).
Sus  
MasterPhoton



Data înscrierii: 06/Mar/2003
Mesaje: 437

Trimis: Mie Sep 03, 2003 5:38 pm    Titlul subiectului:  

Precizare suplimentara:
data fiind complexitatea instructiunii "select", cred ca este mult mai oportuna folosirea doar a serverului mysql, cu un select deshtept, fata de o comparare a doua array-uri in php, care implica mai multe instructiuni masina ale serverului si, deci, mai mult timp pana cand se incarca pagina.
Sus  
biban



Data înscrierii: 13/Apr/2003
Mesaje: 204
Locație: Giurgiu

Trimis: Mie Sep 03, 2003 6:37 pm    Titlul subiectului:  

Perfect de acord cu aceasta precizare, este motivul pentru care am insistat pe teoria selectului shi in mod special pentru un singul select care sa rezolve toate problemele.
Pentru ca am pomenit mai devreme de compararea array-urilor am facut un research shi am gasit doua functzii: array_diff shi array_intersect care calculeaza diferentza shi asemanarea a doua tablouri, dar nu mi se pare prea elegant sa se foloseasca php-ul cand poate rezolva mysql-ul problema.
Sus  
PHPRomania Bot
Bot Member


Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google
Trimis: Mie Dec 26, 2007 7:01 pm   Titlul subiectului: Ad  

Sus  
 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> Cod PHP
Pagina 1 din 1


Powered by phpBB 2.0.22 © 2001, 2002 phpBB Group
Varianta în limba română: Romanian phpBB online community