Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 4 odgovora
  • 3.280 pregleda

Najnovija ↓

Pomoc oko jednog MySQL upita 18.09.2003. u 01:55 · pre 281 mesec #1
Pozdrav,

potrebna mi je pomoc oko jednog MySQL upita:

Imam 3 proste tabele
Prva tablela "stavke" ima polja:
Id INT AUTOICREMENT
datum DATE

Druge 2 tabele "ulazi" i "izlazi" su iste:
Id INT AUTOICREMENT
stavka_id INT
iznos DECIMAL(18, 2)

Za svaki record unet u tabelu "stavke" ja mogu da unesem po vise stavki u "ulaze" i/ili "izlaze" i da ih povezem pomocu stavka_id polja sa stavke.id. Dakle oko unosenja podataka nema problema, ali:

Kada hocu da prikazem:
id, datum, zbir ulaza, zbir izlaza imam cudnih rezultata, suma u koloni za zbir ulaza se duplira !?

Code:

SELECT
stavke.id, stavke.datum, SUM(ulazi.iznos), SUM(izlazi.iznos)
FROM stavke, ulazi, izlazi
WHERE stavke.id = ulazi.stavka_id AND stavke.id = izlazi.stavka_id 
GROUP BY (stavke.id)


Da li neko moze da mi kaze gde gresim i kako to da ispravim.
Ispod posta sam ubacio mysqldump izvestaj ako neko zeli da proba da izvrsi.

Hvala najlepse na pomoci.
Bojan

Code:

# MySQL-Front Dump 2.5
#
# Host: localhost   Database: store
# --------------------------------------------------------
# Server version 4.1.0-alpha-max-nt

USE store;


#
# Table structure for table 'izlazi'
#

DROP TABLE IF EXISTS `izlazi`;
CREATE TABLE `izlazi` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `stavka_id` int(11) default NULL,
  `iznos` decimal(18,2) default NULL,
  `neplaceno` decimal(18,2) default NULL,
  `komentar` char(64) default NULL,
  UNIQUE KEY `id` (`id`),
  KEY `id_2` (`id`)
) ENGINE=MyISAM CHARSET=latin1;



#
# Dumping data for table 'izlazi'
#

INSERT INTO `izlazi` (`id`, `stavka_id`, `iznos`, `neplaceno`, `komentar`) VALUES("1", "1", "2.00", "4.00", "");
INSERT INTO `izlazi` (`id`, `stavka_id`, `iznos`, `neplaceno`, `komentar`) VALUES("2", "1", "3.00", "4.00", "");
INSERT INTO `izlazi` (`id`, `stavka_id`, `iznos`, `neplaceno`, `komentar`) VALUES("3", "2", NULL, NULL, "");
INSERT INTO `izlazi` (`id`, `stavka_id`, `iznos`, `neplaceno`, `komentar`) VALUES("4", "2", NULL, NULL, "");


#
# Table structure for table 'stavke'
#

DROP TABLE IF EXISTS `stavke`;
CREATE TABLE `stavke` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `datum` date default NULL,
  UNIQUE KEY `id` (`id`),
  KEY `id_2` (`id`)
) ENGINE=MyISAM CHARSET=latin1;



#
# Dumping data for table 'stavke'
#

INSERT INTO `stavke` (`id`, `datum`) VALUES("1", "2003-09-18");
INSERT INTO `stavke` (`id`, `datum`) VALUES("2", "2003-09-18");


#
# Table structure for table 'ulazi'
#

DROP TABLE IF EXISTS `ulazi`;
CREATE TABLE `ulazi` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `stavka_id` int(11) default NULL,
  `iznos` decimal(18,2) default NULL,
  `neplaceno` decimal(18,2) default NULL,
  `komentar` char(64) default NULL,
  UNIQUE KEY `id` (`id`),
  KEY `id_2` (`id`)
) ENGINE=MyISAM CHARSET=latin1;



#
# Dumping data for table 'ulazi'
#

INSERT INTO `ulazi` (`id`, `stavka_id`, `iznos`, `neplaceno`, `komentar`) VALUES("1", "1", "2.00", "0.00", NULL);
INSERT INTO `ulazi` (`id`, `stavka_id`, `iznos`, `neplaceno`, `komentar`) VALUES("2", "2", "5.00", "0.00", "");
Re: Pomoc oko jednog MySQL upita 18.09.2003. u 02:49 · pre 281 mesec #2
Takve stvari ne mozes da radis sa WHERE-om, nego moras da koristis JOIN.
Procitaj malo o JOIN-u.

Code:
SELECT SUM( ulazi.iznos ),
       SUM( izlazi.iznos ),
       ulazi.id,
       stavke.datum
FROM stavke
   INNER JOIN ulazi ON (stavke.id = ulazi.id)
   INNER JOIN izlazi ON (ulazi.id = izlazi.id)
GROUP BY ulazi.id, stavke.datum

Nisam se previse udubljivao u tvoj post, pa nisam siguran da je ovo sto tebi treba.
Re: Pomoc oko jednog MySQL upita 18.09.2003. u 03:06 · pre 281 mesec #3
Pozdrav, hvala na odgovoru

Nazalost, ne radi. :(

Ja vrlo slabo znam da radim sa JOIN -om a resenje mi treba hitno.

Da li negde ima neki dobar tuturial na webu za rad sa JOIN om u MySQL, da mogu da resim ovaj problem sto pre , jer nemam ni jednu knjigu za rad sa sql-om.

Ako neko zna kako da ovo proradi, bio bih mu veoma zahvalan. :)
Hvala
Bojan
Re: Pomoc oko jednog MySQL upita 18.09.2003. u 04:48 · pre 281 mesec #5
Citat:
SELECT
stavke.id, stavke.datum, SUM(ulazi.iznos), SUM(izlazi.iznos)
FROM stavke, ulazi, izlazi
WHERE stavke.id = ulazi.stavka_id AND stavke.id = izlazi.stavka_id
GROUP BY (stavke.id)


U Group By moras da stavis sve sto imas u Select-u, osim agregatnih funkcija (sum, max itd.) Nesto kao:

SELECT
stavke.id, stavke.datum, SUM(ulazi.iznos), SUM(izlazi.iznos)
FROM stavke, ulazi, izlazi
WHERE stavke.id = ulazi.stavka_id AND stavke.id = izlazi.stavka_id
GROUP BY stavke.id, stavke.datum


U suprotnom efekat je isti kao i da nemas Group By.

Bokice, obican ili inner join ima isti efekat kao i where clausula (tacnije to je njen specijalan slucaj). Ne moras da dajes odgovor ako nesto ne znas. Niko ti nece zameriti.
Potpis
A computer once beat me at chess, but it was no match for me at kick boxing.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme