Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Da li je moguće samo pomoću sql-a dobiti ovakav rezultat...

[es] :: MySQL :: Da li je moguće samo pomoću sql-a dobiti ovakav rezultat...

[ Pregleda: 2726 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

dsivic

Član broj: 188446
Poruke: 105



+2 Profil

icon Da li je moguće samo pomoću sql-a dobiti ovakav rezultat...08.06.2012. u 18:23 - pre 143 meseci
Code:



/********************************************************

Zdravo svima,
 
U tabeli ispod je suma koliko je svaki radnik nabrao nekog proizvoda.

Moze li se ovakav prikaz dobiti samo pomoću SQL-a, ako dođe još jedan proizvod da se automatski uključi, to također važi i za novog radnika

PS: inace radim nesto u php-u, i rijesio sam to kroz petlje i vise upita...

********************************************************/



| radnik    | proizvod1 | proizvod2 | proizvod3 |itd    |
+-----------+-----------+-----------+-------------------+
| ImePrezime| 12        | 21        | 1         | 68    |
+-----------+-----------+-----------+-----------+-------+
| ImePrezime| 23        | 16        | 44        | 18    |
+-----------+-----------+-----------+-----------+-------+
| ImePrezime| 17        | 19        | 33        | 28    |
+-----------+-----------+-----------+-----------+-------+
| ImePrezime| 17        | 33        | 4         | 18    |
+-----------+-----------+-----------+-----------+-------+


/*tabela radnik*/

CREATE TABLE `radnik` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `naziv` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
INSERT INTO `radnik` VALUES ('1', 'ImePrezime1');
INSERT INTO `radnik` VALUES ('2', 'ImePrezime2');
INSERT INTO `radnik` VALUES ('3', 'ImePrezime3');
INSERT INTO `radnik` VALUES ('4', 'ImePrezime4');
INSERT INTO `radnik` VALUES ('6', 'ImePrezime5');


/*tabela proizvod*/
CREATE TABLE `proizvod` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `naziv` varchar(255) NOT NULL,
  `tezina` double(7,3) NOT NULL DEFAULT '0.000',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

INSERT INTO `proizvod` VALUES ('1', 'Proizvod 1', '0.350');
INSERT INTO `proizvod` VALUES ('2', 'Proizvod 2', '2.000');
INSERT INTO `proizvod` VALUES ('3', 'Proizvod 3', '0.350');
INSERT INTO `proizvod` VALUES ('4', 'Proizvod 4', '0.350');




/*tabela magacin*/
CREATE TABLE `magacin` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `radnik_id` int(11) NOT NULL,
  `proizvod_id` int(11) NOT NULL,
  `kolicina` double(10,3) NOT NULL DEFAULT '0.000'
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8;
INSERT INTO `magacin` VALUES ('1', '1', '1', '0.350');
INSERT INTO `magacin` VALUES ('2', '1', '1', '0.350');
INSERT INTO `magacin` VALUES ('3', '1', '2', '2.000');
INSERT INTO `magacin` VALUES ('4', '1', '1', '0.350');
INSERT INTO `magacin` VALUES ('5', '1', '2', '2.000');
INSERT INTO `magacin` VALUES ('6', '1', '4', '0.350');
INSERT INTO `magacin` VALUES ('7', '2', '1', '0.350');
INSERT INTO `magacin` VALUES ('8', '2', '3', '0.350');
INSERT INTO `magacin` VALUES ('9', '2', '4', '0.700');
INSERT INTO `magacin` VALUES ('10', '2', '4', '0.350');
INSERT INTO `magacin` VALUES ('11', '3', '1', '0.350');
INSERT INTO `magacin` VALUES ('12', '3', '3', '0.350');
INSERT INTO `magacin` VALUES ('13', '3', '3', '0.350');
INSERT INTO `magacin` VALUES ('14', '3', '3', '0.350');
INSERT INTO `magacin` VALUES ('15', '3', '4', '1.050');
INSERT INTO `magacin` VALUES ('16', '3', '4', '0.700');
INSERT INTO `magacin` VALUES ('17', '4', '1', '0.350');
INSERT INTO `magacin` VALUES ('18', '4', '1', '0.350');
INSERT INTO `magacin` VALUES ('19', '4', '3', '0.350');
INSERT INTO `magacin` VALUES ('20', '4', '4', '0.350');
INSERT INTO `magacin` VALUES ('35', '2', '1', '0.350');
INSERT INTO `magacin` VALUES ('36', '3', '1', '0.350');
INSERT INTO `magacin` VALUES ('37', '4', '1', '0.350');

 
Odgovor na temu

Igor Gajic

Član broj: 93194
Poruke: 747
*.dynamic.isp.telekom.rs.



+987 Profil

icon Re: Da li je moguće samo pomoću sql-a dobiti ovakav rezultat...08.06.2012. u 18:37 - pre 143 meseci
Hm... Ovako nesto ?


Code (sql):

SELECT r.naziv, p.naziv, SUM(kolicina) AS Total
FROM magacin m
JOIN radnik r ON r.id = m.radnik_id
JOIN proizvod p ON p.id = m.proizvod_id
GROUP BY m.radnik_id, m.proizvod_id;
 



 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: Da li je moguće samo pomoću sql-a dobiti ovakav rezultat...08.06.2012. u 18:43 - pre 143 meseci
Evo jednog rešenja: http://www.databasejournal.com...d-Rows-in-Crosstab-Queries.htm
To što ti tražiš, zovu se pivot tabele, a u MySQL se postižu kroz "trikove" kao u gornjem primeru.
Uvek je bolje rešenje da napraviš jednostavan upit, a onda u PHP-u da odradiš formatiranje...
 
Odgovor na temu

dsivic

Član broj: 188446
Poruke: 105



+2 Profil

icon Re: Da li je moguće samo pomoću sql-a dobiti ovakav rezultat...08.06.2012. u 18:43 - pre 143 meseci
@Igor Gajic

Obrati pažnju da tabela (razultat koji dobijemo od mysql-a) mora izgledati kao u primjeru...
 
Odgovor na temu

Igor Gajic

Član broj: 93194
Poruke: 747
*.dynamic.isp.telekom.rs.



+987 Profil

icon Re: Da li je moguće samo pomoću sql-a dobiti ovakav rezultat...08.06.2012. u 18:46 - pre 143 meseci
Aggregate table su dobre ako imas predefinisan broj kolona. U ovom slucaju broj proizvoda je proizvoljan tako da bi to iskomplikovalo query(ako je uopste moguce). Daleko bolji pristup je, kao sto je djoka_l vec predlozio, da se rezultat obradi u PHP-u.
 
Odgovor na temu

dsivic

Član broj: 188446
Poruke: 105



+2 Profil

icon Re: Da li je moguće samo pomoću sql-a dobiti ovakav rezultat...08.06.2012. u 18:50 - pre 143 meseci
Tako sam i uradio (na kraju, poslje dužeg lutanja...), ali bi stvaro bilo dobro da se to rijesi jednim upitom, jer i php ima svoja ogranicenja, poput vremensko limita na izvrsavanje skripte...itd
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
95.180.61.*

Sajt: mysql.rs


+2377 Profil

icon Re: Da li je moguće samo pomoću sql-a dobiti ovakav rezultat...09.06.2012. u 00:23 - pre 143 meseci
izlaz rotiran za 90 stepeni ne mozes nikako da kvalitetno dobijes ni na jednom rdbms-u na svetu i ako ti treba takav result iz baze - pogresan ti je koncept aplikacije.

Neki rdbms-i znaju da su im useri kreteni pa ti takve stvari donekle olaksavaju (oracle db na primer) dok drugi (poput mysql-a) rade na efikasnosti a ako user ne zna kako da napise app, plati support pa ga se nauci .. pomaganje u radu na pogresan nacin samo produbljuje problem

ti uz pomoc css-a (a kapiram da je ovde neki web u pitanju) taj report mozes da formatiras kako ti drago, da ga rotiras za 90 stepeni ili ne bez ikakvih problema te sa normalnim mysql upitom i malo znanja php-a, html-a i css-a mozes da resis problem da uzima ukupno mnogo manje resursa nego da bilo kojim trikovima teras mysql da ti formatira izlaz sa nepoznatim brojem kolona ..
 
Odgovor na temu

dsivic

Član broj: 188446
Poruke: 105



+2 Profil

icon Re: Da li je moguće samo pomoću sql-a dobiti ovakav rezultat...09.06.2012. u 06:35 - pre 143 meseci
Ljudi fala na odgovorima,...
 
Odgovor na temu

[es] :: MySQL :: Da li je moguće samo pomoću sql-a dobiti ovakav rezultat...

[ Pregleda: 2726 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.