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
 

Select mai complex in MySql ???
Vezi mesajul original

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



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

Trimis: Mie Feb 18, 2004 11:32 pm    Titlul subiectului: Select mai complex in MySql ???  

Salut !
Am o mare problema si nu e aia cu trenurile ce pleaca din doua orase ... :?
Am trei tabele: intrari(prod_id int(11),cant_in int(11)), iesiri(prod_id int(11), cant_out int(11)) si produse(prod_id auto(), denumire varchr(65). Vreau sa fac un query bazat numai pe SELECT (e cel mai rapid si super optimizat, dupa parerea mea, in MySQL) incit sa obtin stocul produselor.Am incercat in fel si chip dar nu mi-au iesit decit ochii de nesomn.Problema ar putea fi simpla la prima vedere cu un SELECT DISTINCTROW dintr-un JOIN de tip LEFT sau INNER, numai ca este o singura problema: in tabela intrari an si produse care nu exista in tabela iesiri si invers si la SELECT DISTINCT mi le ia numai pe alea care exista in cele doua tabele
Sus  
diaconuliviu



Data înscrierii: 19/Feb/2004
Mesaje: 15

Trimis: Joi Feb 19, 2004 3:29 pm    Titlul subiectului: Iarta-ma  

..ca te intreb, cum poti avea articole in iesiri fara a avea intrari?.. asta e ca si cind ai vinde ce nu ai..
Sus  
biban



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

Trimis: Joi Feb 19, 2004 5:30 pm    Titlul subiectului:  

...daca raspunzi laintrebarea asta ai rezolvat problema.
nu ai cum sa scoti ce nu ai asha ca ar trebui sa fie suficient join-ul pentru ca va afisa stocurile la tot ce a intrat.
Sus  
computershop



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

Trimis: Joi Feb 19, 2004 6:57 pm    Titlul subiectului: Re: Iarta-ma  

diaconuliviu a scris: ..ca te intreb, cum poti avea articole in iesiri fara a avea intrari?.. asta e ca si cind ai vinde ce nu ai..

...pii iti voi spune cum, nu e normal dar se intimpla : vine amrfa se vinde si apoi vin actele de intrare ! Oricum va multumesc ca v-ati straduit sa-mi raspundeti.
Sus  
diaconuliviu



Data înscrierii: 19/Feb/2004
Mesaje: 15

Trimis: Lun Feb 23, 2004 7:57 am    Titlul subiectului: Re: Iarta-ma  

computershop a scris: diaconuliviu a scris: ..ca te intreb, cum poti avea articole in iesiri fara a avea intrari?.. asta e ca si cind ai vinde ce nu ai..

...pii iti voi spune cum, nu e normal dar se intimpla : vine amrfa se vinde si apoi vin actele de intrare ! Oricum va multumesc ca v-ati straduit sa-mi raspundeti.


Marfa poate veni fara factura (temporar), dar obligatoriu va avea acel aviz de insotire care cuprinde pretul, cantitatea, deci pe baza lui se poata face "intrarea"..asta era mai demult..poate acum e chiar obligatorie existenta facturii..

tu vinzi acel program? Undeva prin lege scrie ca este raspunderea programatorului legalitatea acelui program.. de unde stii pretul marfii daca nu ai acte? cum poti vinde o marfa pentru care nu ai acte? e frauda.. grija mare ce proiectezi si pentru cine.. nu poti spune ASA MI-A CERUT la un control..
Sus  
computershop



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

Trimis: Vin Feb 27, 2004 9:37 pm    Titlul subiectului: Re: Iarta-ma  

:D ...prietene, eu am intrebat doar cum se poate face un SELECT, si tu m-ai luat cu controalele sau cu legile. Oricum sa stiti ca tot nu am reusit, deci daca poate sa-mi dea cineva o mana de ajutor sunt recunoscator si dau o bere la mare la vara ca acum e frig !
Sus  
Radical



Data înscrierii: 16/Feb/2004
Mesaje: 327
Locație: Bucuresti

Trimis: Mar Mar 16, 2004 5:35 pm    Titlul subiectului: CEREREA complexa  

Dupa mici discutii online cu computershop an ajuns aman2 la concluzia ca acest query ii trebuia:

Cod: SELECT produse.prod_id AS id_din_produse, SUM(achizb.cant) as c_in, SUM(certifb.cant) as c_out,
       SUM(certifb.cant)-SUM(achizb.cant) AS diferenta,
       achizb.pintr, produse.denlung, produse.garantie, produse.uzura, produse.pret_out
       FROM produse
       LEFT JOIN achizb ON(achizb.prod_id=produse.prod_id)
       LEFT JOIN certifb ON(certifb.prod_id=produse.prod_id)
       WHERE achizb.cant is not null AND certifb.cant is not null
       GROUP BY achizb.cant, achizb.pintr, certifb.prod_id
       ORDER BY produse.prod_id ASC
Sus  
computershop



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

Trimis: Mar Mar 16, 2004 5:38 pm    Titlul subiectului: Re: CEREREA complexa  

[quote="Radical"]Dupa mici discutii online cu computershop an ajuns aman2 la concluzia ca acest query ii trebuia:

... practic au fost mici, dar intense :D !!!
Sus  
aniflaviu



Data înscrierii: 02/Mar/2004
Mesaje: 67

Trimis: Mar Apr 27, 2004 2:04 pm    Titlul subiectului:  

si eu am nevoie de un select mai special tot pentru evidentierea unui stoc

daca ar fi fost date niste explicatii la selectul postat poate ca reuseam si eu sa fac ceva ...

am doua tabele:

CREATE TABLE livrate (
id int(10) unsigned NOT NULL auto_increment,
data date NOT NULL default '0000-00-00',
produs varchar(50) NOT NULL default '',
buc smallint(5) unsigned NOT NULL default '0',
datatimp datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (id)
) TYPE=MyISAM;


si


CREATE TABLE realizate (
id int(10) unsigned NOT NULL auto_increment,
data date NOT NULL default '0000-00-00',
produs varchar(50) NOT NULL default '',
buc smallint(5) unsigned NOT NULL default '0',
datatimp datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (id)
) TYPE=MyISAM;


structura e aceiasi, diferind doar numele
zilnic se introduc produsele realizate si cele livrate


inregistrarile arata cam asa:


data produsul buc data inregistrarii cod unic

01-01-2004 p1 1 22-04-2004 12:59:39 4
02-02-2005 p2 2 22-04-2004 13:00:31 5
03-03-2006 p3 3 22-04-2004 13:12:33 6
04-04-2007 p1 4 22-04-2004 13:12:51 7
05-05-2008 p2 5 22-04-2004 13:13:18 8


in acest caz stocul se calculeaza prin "scaderea" din realizate a celor livrate
tinand cont ca se introduc zilnic produse, acestea trebuie mai intai grupate apoi scazute


va multumesc!
Sus  
computershop



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

Trimis: Mar Apr 27, 2004 4:47 pm    Titlul subiectului:  

Practic exemplul-rezolvare postat n-a mers. Am lasat-o cum o facusem eu intial inainte de a posta intrebarea, adica cu doua insert-uri intr-o tabela temporara si un select final pentru stocuri. Dar, daca citeai 8O intreg topicul aveai o potentiala explicatia la problema ta. La tine treaba este destul de simpla, incearca sa citesti help-ul la SELECT, are doua instructiuni care te vor ajuta (daca inveti sa le folosesti corect :) ), si anume JOIN(de tip LEFT sau RIGHT) in functie cum tabelele in relatie (eu te sfatuiesc sa folosesti LEFT) si GROUP BY. Multa bafta ! Daca nu te descurci deloc (dar fa-ti lectiile mai intai) te astept cu intrebari !

Si acum imi cer scuze pentru ce voi intreba in continuare, sper sa nu supar pe nimeni, sunt doua intrebari ce ma macina de mult :

:?: De ce oare se asteapta anumiti oameni ce posteaza aici, sau pe alte forum-uri sa obtina raspunsuri complete si/sau cat mai complexe, fara a studia initial indeajuns problema pe care o posteaza ?

:?: De ce oare raspunsurile nu sunt la obiect (vezi si exemplu meu de acum :? ) si deseori bat caimpii ? - Eu am intrebat in topicul acesta mai sus cum fac un select si am primit un raspuns cum ca nu este normal ce vreau eu, si daca vine politia economica si garda financiara si trupele lui Baiazid Cuceritorul peste mine n-o sami fie bine deloc daca vreau sa fac selectul in cauza (am fos un pic tendentios, nu va suparati !)

Pa

Leo de la Constanta
Sus  
aniflaviu



Data înscrierii: 02/Mar/2004
Mesaje: 67

Trimis: Mie Mai 05, 2004 8:01 am    Titlul subiectului:  

am facut urmatoarea interogare:

SELECT realizate.produs produs , sum(realizate.buc) bucati_realizate , sum(livrate.buc) bucati_livrate , (sum(realizate.buc)-sum(livrate.buc)) stoc from realizate LEFT JOIN livrate on realizate.produs = livrate.produs GROUP BY realizate.produs ORDER BY realizate.produs ASC

imi merge doar in prima faza, cu datele existente in db initial. dupa ce introduc noi date totul se da peste cap, indiferent ca introduc datele cu codul php personal, phpmyadmin, sau alt program folosit in gestiunea mysql db

ex:

produs bucati_realizate bucati_livrate stoc

peste 5 2 3 (asta chiar la inceput inainte de a mai introduce date)

daca introduc la livrate 1 bucata de peste imi face:

peste 10 3 7 (incrementeaza corect pestii livrati dar imi mareste si buc realizate cu valoarea initiala)

daca mai introduc 2 buc de peste:

peste 15 5 10 (incrementeaza corect pestii livrati dar imi mareste si buc realizate cu valoarea existenta initial, 5)


Daca introduc date in tabela realizate, la fel, imi da ceva ciudat ...

va multumesc anitcipat pentru interesul manifestat!

toate cele bune!
Sus  
computershop



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

Trimis: Mie Mai 05, 2004 8:45 am    Titlul subiectului:  

aniflaviu a scris: am facut urmatoarea interogare:

SELECT realizate.produs produs , sum(realizate.buc) bucati_realizate , sum(livrate.buc) bucati_livrate , (sum(realizate.buc)-sum(livrate.buc)) stoc from realizate LEFT JOIN livrate on realizate.produs = livrate.produs GROUP BY realizate.produs ORDER BY realizate.produs ASC

imi merge doar in prima faza, cu datele existente in db initial. dupa ce introduc noi date totul se da peste cap, indiferent ca introduc datele cu codul php personal, phpmyadmin, sau alt program folosit in gestiunea mysql db

ex:

produs bucati_realizate bucati_livrate stoc

peste 5 2 3 (asta chiar la inceput inainte de a mai introduce date)

daca introduc la livrate 1 bucata de peste imi face:

peste 10 3 7 (incrementeaza corect pestii livrati dar imi mareste si buc realizate cu valoarea initiala)

daca mai introduc 2 buc de peste:

peste 15 5 10 (incrementeaza corect pestii livrati dar imi mareste si buc realizate cu valoarea existenta initial, 5)


Daca introduc date in tabela realizate, la fel, imi da ceva ciudat ...

va multumesc anitcipat pentru interesul manifestat!

toate cele bune!

Desi am citit de 3 oriu postul tau, nu te pot ajuta ca nu am inteles nimik :(
Fii mai explicit! si mai practic, ia-o pe pasi !
Sus  
aniflaviu



Data înscrierii: 02/Mar/2004
Mesaje: 67

Trimis: Mie Mai 05, 2004 9:29 am    Titlul subiectului:  

intr-o db de test te rog creaza cele doua tabele:

CREATE TABLE realizate (
id int(10) unsigned NOT NULL auto_increment,
data date NOT NULL default '0000-00-00',
produs varchar(50) NOT NULL default '',
buc smallint(5) unsigned NOT NULL default '0',
datatimp datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (id)
) TYPE=MyISAM;


CREATE TABLE livrate (
id int(10) unsigned NOT NULL auto_increment,
data date NOT NULL default '0000-00-00',
produs varchar(50) NOT NULL default '',
buc smallint(5) unsigned NOT NULL default '0',
datatimp datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (id)
) TYPE=MyISAM;


introdu niste date si apoi executa:

SELECT realizate.produs produs , sum(realizate.buc) bucati_realizate , sum(livrate.buc) bucati_livrate , (sum(realizate.buc)-sum(livrate.buc)) stoc from realizate LEFT JOIN livrate on realizate.produs = livrate.produs GROUP BY realizate.produs ORDER BY realizate.produs ASC

o sa mearga!

daca mai introduci alte valori dupa ce ai executat o data interogarea nu o sa mai mearga. fa un test!

mersi mult!
Sus  
computershop



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

Trimis: Mie Mai 05, 2004 9:42 am    Titlul subiectului:  

aniflaviu a scris: pai, nu merge asa cum vrei tu! In primul rand ca problema ta cam scartie la capitolul analiza.Practic de aceea obti inregistrari aiurea acolo. Treci pe MSN sa detaliem.
Sus  
aniflaviu



Data înscrierii: 02/Mar/2004
Mesaje: 67

Trimis: Mie Mai 05, 2004 10:42 am    Titlul subiectului:  

am instalat msn messenger dar nu esti online ... am incercat sa trimit un e-mail la Leonard_LEPADATU@hotmail.com si imi spune ca nu exista adresa ... ce se intampla?

vezi profilul meu pentru a putea lua legatura
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 -> MySQL
Pagina 1 din 1


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