Novo

Forum kao aplikacija na telefonu

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

  • 6 odgovora
  • 2.143 pregleda

Najnovija ↓

Vracanje max id kod spajanja 15.02.2011. u 10:45 · pre 191 mesec #1
Naslov nije baš najsretniji ali ništa bolje mi nije palo na pamet.

Problem je prost (bar mi se čini) ali ja sam zakucao i ne mogu da provalim.
Treba da izvučem podatke iz par tabela, od kojih iz jedne tabele treba da izvučem samo red (i jedan podatak iz njega) gdje je i max(id) za korisnik_id preko koga spajam tu tabelu.
E, sve radi osim toga. Ja dobijem prvi unos iz te tabele za taj korisnik_id, a treba mi posljednji.

Code (sql):

SELECT username, pa_jos_kolona_iz_drugih_tabela, cena (za ovo mi treba cena iz posljednjeg unosa MAX(id))
FROM
tabele razno razne
WHERE
razno razni uslovi i spajanje tih tabela
GROUP BY username;
 


Nadam se da ovo nije previše apstraktno opisano i da može da se skapira šta me muči.
Potpis
Beneath civilization's fragile crust, cold chaos churns...
Re: Vracanje max id kod spajanja 15.02.2011. u 15:51 · pre 191 mesec #2
Help ti lepo kaze sledece:

Citat:

If you use GROUP BY, output rows are sorted according to the GROUP BY columns as if you had an ORDER BY for the same columns.
To avoid the overhead of sorting that GROUP BY produces, add ORDER BY NULL:


Zbog toga moras prvo da napravis prost query gde sortiras vrednosti po max(id) tj order by id desc pa zatim da uradis select iz tog rezultat grupisan po polju user iliti otprilike ovako:

Code:

select a.user,a.cena from 
   (SELECT user,c.cena FROM user u, cenovnik c order by c.id desc) a 
group by ime order by NULL;


Potpis
Tko leti vrijedi
Re: Vracanje max id kod spajanja 16.02.2011. u 00:54 · pre 191 mesec #3
primer:

Code:

SELECT t1.f1, t1.f2, t1.f3, t2.f1, t2.f2, t3.f1
FROM t1, t2, t3
WHERE
t1.f1 > t2.f1 AND
t1.f3 > 10 AND
t3.f1 = 'xyz' AND

t2.f2 = (SELECT MAX(t4.id) FROM t4)

ORDER BY t1.f1 DESC;


jasno?

ovo ti "spaja" t1, t2 i t3 tako da ti je t2.f2 = taj max() koji si hteo ... to sto si napisao ti je ovaj upit, ako si hteo nesto drugo - napisi bolje objasnjenje sta hoces da izvedes
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Re: Vracanje max id kod spajanja 16.02.2011. u 10:05 · pre 191 mesec #4
Ali meni treba to za svakog korisnika.
Evo konkretno, tabela korisnici u kojoj se nalazi username i neki standardni podaci o korisniku, i tabela kupljene_knjige u kojoj se nalazi svaka knjiga koju je do sada kupio taj korisnik kao i cijena te knjige.
Meni treba da vratim sve podatke o korisniku korisnici.* i posljednju knjigu koju je uzeo taj korisnik zajedno sa cijenom te knjige.
Nadam se da je sad malo jasnije :-)
Potpis
Beneath civilization's fragile crust, cold chaos churns...
Re: Vracanje max id kod spajanja 16.02.2011. u 10:42 · pre 191 mesec #5
Pretpostavimo da tabela korisnici ima kolone ID i USERNAME, a kupljene knjige imaju ID, USERID (onoga koji je kupio knjigu) i CENA

Onda je kod:

Code (sql):

SELECT u.*, x.*
FROM korisnici u,  (
   SELECT id, userid, cena
   FROM kupljene_knjige k, (
      SELECT MAX(id) id, userid
      FROM kupljene_knjige
      GROUP BY userid) m
   WHERE k.id = m.id) x
WHERE u.id = x.userid
 


Naravno, u upitu gde spajaš korisnike sa ugnežđenim upitom možeš da staviš OUTER JOIN ako te interesuju i korisnici koji nisu kupili knjigu.
Re: Vracanje max id kod spajanja 16.02.2011. u 13:32 · pre 191 mesec #6
Bravo, to je to ;-)
Potpis
Beneath civilization's fragile crust, cold chaos churns...
Re: Vracanje max id kod spajanja 16.02.2011. u 17:38 · pre 191 mesec #7
btw, obrati samo paznju da ne koristis nikakve blobove, text-ove ili varchar-ove preko 255 karaktera u ovakvim upitima posto ce znacajno zabosti performanse (pravice se temp tabele na disku umesto u ramu)
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Sviđa mi se1
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme