[ codeb.s @ 11.05.2012. 20:16 ] @
Imam dve tabele u master-detail vezi u jednoj je osnovni podaci o računu
id - int (autoinc)
datum_obracuna - date
ukupno - float

i tabelu u koju dodajem pojedinačne stavke sa poljima

id -int(autoinc)
rn_id - int
datum_obracuna- date
artikal_id - int
kolicina - float

Sad trebam da uradi sql upit koji će mi u napraviti poređenje u mesecima po količini artikala sa razlikom zadnja dva meseca.

npr

tlbRacun
1 , 31.01.2012, 150
2 , 28.02.2012, 120
3, 31.03.2012, 140

tlbStavke
1, 1, artikal1, 10
2, 1, artikal2, 12
3, 2, artikal1, 15
4, 2, artikal2, 10
5, 3, artikal1, 20
6, 3, artikal2, 8

Rezultat koji trebam dobiti je

+---------------+----------------+---------------+------------------+----------+
+ artikal --------+ januar---------+februar---------+mart-------------+razlika----+
+ artikal1-------+10-------------+15--------------+20---------------+5---------+
+ artikal2-------+12-------------+10--------------+8----------------+ -2 -------+
+---------------+----------------+---------------+------------------+----------+

Kako da postavim upit?
Da li je potrebno da izvrši restruktuisanje tabela?



[ bogdan.kecman @ 11.05.2012. 22:37 ] @
po n-ti put

daj create table .... insert into ... insert into ... kao primer, dakle da neko moze copy paste toga u svoju test bazu i da ima podatke nad kojima moze da proba da ti napravi upit ...

[ codeb.s @ 12.05.2012. 07:16 ] @
Evo

Code:



-- phpMyAdmin SQL Dump
-- version 3.2.4
-- http://www.phpmyadmin.net
--
-- Računalo: localhost
-- Vrijeme generiranja: Svi 12, 2012 u 08:17 PM
-- Verzija poslužitelja: 5.1.41
-- PHP verzija: 5.3.1

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Baza podataka: `test1`
--

-- --------------------------------------------------------

--
-- Tablična struktura za tablicu `dobavljac`
--

CREATE TABLE IF NOT EXISTS `dobavljac` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dobavljac` varchar(100) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

--
-- Izbacivanje podataka za tablicu `dobavljac`
--

INSERT INTO `dobavljac` (`id`, `dobavljac`) VALUES
(1, 'dabavljac1');



Rezultat koji trebam dobiti je

+---------------+----------------+---------------+------------------+----------+
+ artikal --------+ 31.01.2012----+29.02.2012-----+31.03.2012-------+razlika----+
+ artikal1-------+10-------------+15--------------+20---------------+5---------+
+ artikal2-------+12-------------+10--------------+8----------------+ -2 -------+
+---------------+----------------+---------------+------------------+----------+

Kako da postavim upit?
Da li je potrebno da izvrši restruktuisanje tabela?
[ bogdan.kecman @ 13.05.2012. 09:38 ] @
ne postoji upit koji od :

INSERT INTO `dobavljac` (`id`, `dobavljac`) VALUES (1, 'dabavljac1');

moze da napravi

+---------------+----------------+---------------+------------------+----------+
+ artikal --------+ 31.01.2012----+29.02.2012-----+31.03.2012-------+razlika----+
+ artikal1-------+10-------------+15--------------+20---------------+5---------+
+ artikal2-------+12-------------+10--------------+8----------------+ -2 -------+
+---------------+----------------+---------------+------------------+----------+
[ codeb.s @ 13.05.2012. 11:55 ] @
Greška kod kopiranja SQL-a sorry ... evo opet

Code:



-- phpMyAdmin SQL Dump
-- version 3.2.4
-- http://www.phpmyadmin.net
--
-- Računalo: localhost
-- Vrijeme generiranja: Svi 13, 2012 u 12:56 AM
-- Verzija poslužitelja: 5.1.41
-- PHP verzija: 5.3.1

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Baza podataka: `test1`
--

-- --------------------------------------------------------

--
-- Tablična struktura za tablicu `arikli_rn`
--

CREATE TABLE IF NOT EXISTS `arikli_rn` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dobavljac_id` int(11) NOT NULL,
  `obracun` date NOT NULL,
  `ukupno` float(11,2) NOT NULL,
  `zatezna_kamata` float(11,2) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

--
-- Izbacivanje podataka za tablicu `arikli_rn`
--

INSERT INTO `arikli_rn` (`id`, `dobavljac_id`, `obracun`, `ukupno`, `zatezna_kamata`) VALUES
(1, 1, '2012-01-31', 150.00, 0.00),
(2, 1, '2012-02-29', 120.00, 0.00),
(3, 1, '2012-04-30', 140.00, 0.00);

-- --------------------------------------------------------

--
-- Tablična struktura za tablicu `artikli`
--

CREATE TABLE IF NOT EXISTS `artikli` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `artikal` varchar(100) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=ucs2 AUTO_INCREMENT=3 ;

--
-- Izbacivanje podataka za tablicu `artikli`
--

INSERT INTO `artikli` (`id`, `artikal`) VALUES
(1, 'Artikal 1'),
(2, 'Artikal 2');

-- --------------------------------------------------------

--
-- Tablična struktura za tablicu `artikli_stavke`
--

CREATE TABLE IF NOT EXISTS `artikli_stavke` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `rn_id` int(11) NOT NULL,
  `obracun` date NOT NULL,
  `artikal_id` int(11) NOT NULL,
  `kolicina` float(11,2) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

--
-- Izbacivanje podataka za tablicu `artikli_stavke`
--

INSERT INTO `artikli_stavke` (`id`, `rn_id`, `obracun`, `artikal_id`, `kolicina`) VALUES
(1, 1, '2012-01-31', 1, 10.00),
(2, 1, '2012-01-31', 2, 12.00),
(3, 2, '2012-02-29', 1, 15.00),
(4, 2, '2012-02-29', 2, 10.00),
(5, 3, '2012-03-31', 1, 20.00),
(6, 3, '2012-03-31', 2, 8.00);

-- --------------------------------------------------------

--
-- Tablična struktura za tablicu `dobavljac`
--

CREATE TABLE IF NOT EXISTS `dobavljac` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dobavljac` varchar(100) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

--
-- Izbacivanje podataka za tablicu `dobavljac`
--

INSERT INTO `dobavljac` (`id`, `dobavljac`) VALUES
(1, 'dabavljac1');



Rezultat koji trebam dobiti je

+---------------+----------------+---------------+------------------+----------+
+ artikal --------+ 31.01.2012----+29.02.2012-----+31.03.2012-------+razlika----+
+ artikal1-------+10-------------+15--------------+20---------------+5---------+
+ artikal2-------+12-------------+10--------------+8----------------+ -2 -------+
+---------------+----------------+---------------+------------------+----------+

Kako da postavim upit?
Da li je potrebno da izvrši restruktuisanje tabela?

[ bogdan.kecman @ 13.05.2012. 13:46 ] @
pitanja

1. sta je "razlika" ?
2. jel "31.01.2012, 29.02.2012 ..." dinamicno ili?

za [2] imas problem posto moras da kreiras "fixni upit" ne mozes da kreiras upit sa "nepoznatim brojem atributa u rezultatu". To eventualno mozes da uradis nekom stored procedurom mada lakse da uradis direktno u svom programu

Sto se tice "da li da redizajniram" - treba da redizajniras kako treba da ti izgleda izlaz, sama baza ti izgleda ok koliko ja vidim na prvi pogled jedino sto bi ja to nazvao bolje (npr artikli_rn.id je bolje da se zove artikal_rn.artikl_rn_id ili bar artikal_rn.rn_id .. samo id je po meni pogresno .. ista prica i za artikli_stavke.id .. etc etc
[ codeb.s @ 13.05.2012. 14:21 ] @
Hvala na odgovoru.

Šta mi zapravo treba pokušao sam objasniti u tekstualno delu na početku. Znači, zadnji dan u mesecu se vrši obračun (to je ono 31.01.2012 ili 28.02.2012...), tada dobijam količine pojedinih artikala koje su prometovane u tom mesecu (to je u tabeli polje količina). Nadalje trebam da izvršim poređenje sa proteklim mesecom (to je polje razlika odnosno rezultat količine iz ovog i količine iz proteklog meseca). Ono što bih htio još da uradim je da mi pokazuje sve količine iz zadnja 3,6 ili 12 meseci po artiklima ali i po obračunskim danima. Možda nisam dobro skicirao ni rezultat više je trebao da prikaže tabelu.
Razliku mogu i programski da rešim...


+---------------+----------------+---------------+------------------+----------+
+ artikal --------+ 31.01.2012----+29.02.2012-----+31.03.2012-------+razlika----+
+ artikal1-------+10-------------+15--------------+20---------------+5---------+
+ artikal2-------+12-------------+10--------------+8----------------+ -2 -------+
+---------------+----------------+---------------+------------------+----------+

odgovara mi i ovakav prikaz


+---------------+ arikal1----+artikal2-----+
+ 31.01.2012---+10---------+12----------+
+ 29.02.2012---+15---------+10----------+
+-31.02.2012---+20---------+8-----------+

Mislim da je potrebno izvršiti izradu tabela ali ne znam kako?