Select mai complex in MySql ???
Moderatori: Zamolxe, Moderatori
-
computershop
- PHPRomania Supporter
- Mesaje: 19
- Membru din: Lun Sep 01, 2003 7:51 pm
- Contact:
-
computershop
- PHPRomania Supporter
- Mesaje: 19
- Membru din: Lun Sep 01, 2003 7:51 pm
- Contact:
-
computershop
- PHPRomania Supporter
- Mesaje: 19
- Membru din: Lun Sep 01, 2003 7:51 pm
- Contact:
-
computershop
- PHPRomania Supporter
- Mesaje: 19
- Membru din: Lun Sep 01, 2003 7:51 pm
- Contact:
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
!!!
... practic au fost mici, dar intense
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!
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!
-
computershop
- PHPRomania Supporter
- Mesaje: 19
- Membru din: Lun Sep 01, 2003 7:51 pm
- Contact:
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
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
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 :
Pa
Leo de la Constanta
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!
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!
-
computershop
- PHPRomania Supporter
- Mesaje: 19
- Membru din: Lun Sep 01, 2003 7:51 pm
- Contact:
-
computershop
- PHPRomania Supporter
- Mesaje: 19
- Membru din: Lun Sep 01, 2003 7:51 pm
- Contact:
Cine este conectat
Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 13 vizitatori