sql dotaz

Programovacie jazyky, rady, poradňa...
badluck
Amateur
Amateur
Používateľov profilový obrázok
Príspevky: 29
Registrovaný: 18 jún 2006, 18:56

sql dotaz

Príspevok od používateľa badluck »

Cavte borci,
potrebujem poradit s nasledujucim sql dotazom:
V tabulke objednavky mam (okrem ineho) ID uzivatela `id_user` a zaroven celkovu sumu danej objednavky `suma`
Chcel by som vypisat vsetkych uzivatelov z tabulky users a zoradit ich podla toho ktory uzivatel nakupil najviac (ORDER BY suma DESC)
Dufam ze kazdy pochopi co chcem lebo sam pochybujem nakolko zrozumitelne som to napisal :)
Vopred dakujem za odpovede...
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

Kód: Vybrať všetko

select * from users, objednavky where users.id = objednavky.id_user order by suma desc
badluck
Amateur
Amateur
Používateľov profilový obrázok
Príspevky: 29
Registrovaný: 18 jún 2006, 18:56

Príspevok od používateľa badluck »

vdaka ale to este neriesi vsetko co potrebujem,
mne ide o to aby boli uzivatelia zoradeni podla toho kto najviac nakupil, a `suma` v tabulke objednavky je len suma za konkretnu objednavku (jeden uzivatel moze mat viac objednavok)

Nazorna ukazka:
objednavka 0001 - uzivatel ferko - 100eur
objednavka 0002 - uzivatel misko - 150eur
objednavka 0003 - uzivatek ferko - 100eur
objednavka 0004 - uzivatel jozko - 50eur

... teda chcem zobrazit uzivatelov a zoradit ich tak ze ferko bude prvy (spolu ma 200eur) za nim misko a posledny jozko.... A zaroven aj chcem pri kazdom uzivatelovi zobrazit tu celkovu sumu (200, 150, 50)
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

To si ale v pôvodnej otázke nepísal. :)
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

Kód: Vybrať všetko

select *, sum(objednavky.suma) as spolu from users, objednavky where users.id = objednavky.id_user group by objednavky.id_user order by spolu desc
badluck
Amateur
Amateur
Používateľov profilový obrázok
Príspevky: 29
Registrovaný: 18 jún 2006, 18:56

Príspevok od používateľa badluck »

ty si frajer audiotrack, funguje jak ma, dik

update:
No este jedna vec mi chyba ku stastiu a to ze teraz mi zobrazuje len uzivatelov ktori uz spravili nejaky nakup, resp ktorych IDcko najde aj v tabulke objednavky ....
Neda sa to opravit aby to zobrazovalo vsetkych uzivatelov?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

potom sa skús pohrať s joinom, takto nejak

Kód: Vybrať všetko

select *, sum(objednavky.suma) as spolu from users left join objednavky on users.id = objednavky.id_user group by objednavky.id_user order by spolu desc
badluck
Amateur
Amateur
Používateľov profilový obrázok
Príspevky: 29
Registrovaný: 18 jún 2006, 18:56

Príspevok od používateľa badluck »

to som skusal bohuzial to iste :( ziaden join (left, right, inner, full) mi nefunguje. Najlepsie funguje ten left ale tiez len tak ze zobrazuje len userov ktori maju objednavku
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

tak si zase niečo zamlčal, ale bohužial, takto to nefunguje. Treba nazačiatku všetko povedať čo a ako máš, a čo a ako chceš. Spravil som si takéto testovacie tabuľky:

Kód: Vybrať všetko

CREATE TABLE `objednavky` (
  `id` int(11) NOT NULL auto_increment,
  `id_user` int(11) NOT NULL,
  `suma` int(11) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

-- 
-- Dumping data for table `objednavky`
-- 

INSERT INTO `objednavky` (`id`, `id_user`, `suma`) VALUES 
(1, 1, 100),
(2, 1, 100),
(3, 2, 150),
(4, 4, 200),
(5, 1, 80);

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

-- 
-- Table structure for table `users`
-- 

CREATE TABLE `users` (
  `id` int(11) NOT NULL auto_increment,
  `meno` varchar(20) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

-- 
-- Dumping data for table `users`
-- 

INSERT INTO `users` (`id`, `meno`) VALUES 
(1, 'jano'),
(2, 'jurko'),
(3, 'ferko'),
(4, 'miško');
čiže tie stlpce ktoré v tom query vystupujú. 4 užívatelia, pričom prvý má tri objednávky a tretí žiadnu. Spustil som presne to query čo som ti písal, a výstup máš v prílohe. Keby som nemal teplotu, tak ti hneď poviem že to query bolo správne a join tam nahrádza null, no takto si ma trochu zneistil či to správne zgrupuje :)
Prílohy
sql.gif
(15.87 KiB) 101 stiahnutí
badluck
Amateur
Amateur
Používateľov profilový obrázok
Príspevky: 29
Registrovaný: 18 jún 2006, 18:56

Príspevok od používateľa badluck »

no ja mam toto iste a neukaze mi to vsetkych .... uz som zufali tak skusme jedno zufale riesenie ... Ak mozes skus si pridat este 2 uzivatelov (aby si ich mal dokopy 6, a objednavok 5) nesprav im ziadne objednavky a spusti ten dotaz ze co ti to vypise. (viem ze uz som otravny ... ale som zufaly :)
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

tak to daj zgrupovať podľa id užívateľa z userov a nie objednávok:

Kód: Vybrať všetko

select *, sum(objednavky.suma) as spolu from users left join objednavky on users.id = objednavky.id_user group by users.id order by spolu desc
badluck
Amateur
Amateur
Používateľov profilový obrázok
Príspevky: 29
Registrovaný: 18 jún 2006, 18:56

Príspevok od používateľa badluck »

joo jasne uz to bezi este raz dik moc
DeeJay3
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 254
Registrovaný: 22 dec 2008, 19:45
Kontaktovať používateľa:

Re: sql dotaz

Príspevok od používateľa DeeJay3 »

je left join rychlejsi (alebo mensia zataz na server) ako keby som mal tahat data cez dva sql prikazy?
Napísať odpoveď