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

Order by pre Grouop By

[es] :: MySQL :: Order by pre Grouop By

[ Pregleda: 1454 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

kelja

Član broj: 70429
Poruke: 1416
*.dynamic.isp.telekom.rs.



+35 Profil

icon Order by pre Grouop By09.01.2012. u 10:35 - pre 148 meseci
Cilj: prikazivati privatne poruke kao na gejsbuku - ime korisnika kom je poslata poruka, ili od koga je poruka stigla (klik onda otvara sve poruke izmedju dva korisnika)...

Tabele:
messages (id, disc_id, sender, timer, message, read)
message_discussion (mid, user_1, user_2)
users (id, username,...itd, nebitno za ovo)

Upit:
Code:

SELECT users.username, users.image, messages.message, messages.sender
                            

FROM message_discussion
INNER JOIN messages ON messages.disc_id = message_discussion.mid 

INNER JOIN users ON (users.id =  message_discussion.user_1 OR users.id = message_discussion.user_2) AND users.id != '$user_id'
WHERE message_discussion.user_1 = '$user_id' OR message_discussion.user_2 = '$user_id'

GROUP BY message_discussion.mid
ORDER BY messages.timer DESC



Kod i ideju sam pozajmio od ljudi sa jednog drugog foruma, i radi odlicno, ali... prikazuju se samo najstarije poruke, dakle trebalo bi izabrati najnovije poruke koje su poslate, ili primljene, nekako uraditi sortiranje po vremenu, pre group by... vidim da se predlazu neki subselekti, ali meni nije poslo za rukom u ovom konkretnom slucaju da to odradim.

Hvala!

 
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: Order by pre Grouop By09.01.2012. u 12:36 - pre 148 meseci
ako ja dobro kontam pitanje samo treba ono DESC da zamenis sa ASC i radice to sto hoces?!
 
Odgovor na temu

kelja

Član broj: 70429
Poruke: 1416
*.dynamic.isp.telekom.rs.



+35 Profil

icon Re: Order by pre Grouop By09.01.2012. u 12:53 - pre 148 meseci
Nece. Onda izmeni redosled, ali redosled grupa...

Dakle, poslednja poruka, bez obzira da li sam je ja ($user_id) poslao ili primio, ime i slika primaoca/posiljaoca...

Poslacu ako treba test bazu, pa ce biti lakse... uglavnom, fejsbuk funkcionalnost mi treba (pogledaj kako tamo fercera, ako imas nalog:))

Kazem, sve ok radi, sem cinjenice da dobijam prvu poruku, ne poslednju...
 
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: Order by pre Grouop By09.01.2012. u 12:57 - pre 148 meseci
ti uvek dobijas grupe (GROUP BY message_discussion.mid) samo taj redosled mozes da menjas...

FB result strana nije linearna, mozes da je radis sa spoljnim group by i unutrasnjim zasebnim upitom za svaku "grupu" ili da je radis sa jednim upitom koji onda nece da ima group by (prva varijanta je skalabilnija)
 
Odgovor na temu

kelja

Član broj: 70429
Poruke: 1416
*.dynamic.isp.telekom.rs.



+35 Profil

icon Re: Order by pre Grouop By09.01.2012. u 13:26 - pre 148 meseci
Citat:
mozes da je radis sa spoljnim group by i unutrasnjim zasebnim upitom za svaku "grupu"


Aha, hvala mnogo. Jes' da mi terminologija nije najjasnija (nisam bas MySQL znalac, kao sto se vidi), ali cu iskopati valjda neko resenje. :D

A probao sam sa jednim selektom bez grupisanja, onda, naravno, mogu fino sve da sortiram, ali dobijam sve poruke svih korisnika (sto bi mozda moglo da se resi nekim dodatnim uslovima)...


 
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: Order by pre Grouop By09.01.2012. u 15:27 - pre 148 meseci
Citat:
kelja
A probao sam sa jednim selektom bez grupisanja, onda, naravno, mogu fino sve da sortiram, ali dobijam sve poruke svih korisnika (sto bi mozda moglo da se resi nekim dodatnim uslovima)...


bas tako, to je manje skalabilno ali brze resenje, samo sa dodatnim uslovima pokupis samo poruke koje te zanimaju
 
Odgovor na temu

kelja

Član broj: 70429
Poruke: 1416
*.dynamic.isp.telekom.rs.



+35 Profil

icon Re: Order by pre Grouop By10.01.2012. u 09:53 - pre 148 meseci
Ovo je jedino sto sam uspeo da sklepam, sledeci neka uputstva sa neta.

Citat:
SELECT *
FROM (

SELECT users.username, users.image, messages.message, messages.sender, message_discussion.mid
FROM message_discussion, messages, users
WHERE messages.disc_id = message_discussion.mid
AND (
users.id = message_discussion.user_1
OR users.id = message_discussion.user_2
)
AND users.id != '2'
AND (
message_discussion.user_1 = '2'
OR message_discussion.user_2 = '2'
)
ORDER BY messages.timer DESC
) AS tabler
GROUP BY tabler.mid


E, sad, da li je ovo preporucljivo? Mislim na brzinu izvrsavanja, opterecenje i tako to... Hvala!

Edit: Imam utisak da ce biti potrebno jos jedno polje - vreme zapocinjanja/nastavljanja diskusije, u message_discussion tabeli, da bih konacno mogao da sortiram poruke/diskusije po vremenu... ima li to smisla? :D

[Ovu poruku je menjao kelja dana 10.01.2012. u 11:05 GMT+1]
 
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: Order by pre Grouop By10.01.2012. u 12:06 - pre 148 meseci
dal je dobro ili nije bez izlaza EXPLAIN-a tesko da neko moze da ti kaze
da bi EXPLAIN imao smisla u tabelama mora da postoje podaci
 
Odgovor na temu

kelja

Član broj: 70429
Poruke: 1416
*.dynamic.isp.telekom.rs.



+35 Profil

icon Re: Order by pre Grouop By10.01.2012. u 13:04 - pre 148 meseci
He, he, evo tabela...

Ovo radi ono sto mi treba (skoro), samo, moralo bi da se doda jos jedno time polje u diskusiju, da bih mogao da grupisem, po diskusijama, i sortiram po vremenu poslednje poslate poruke, mada vec postoji vreme u tabeli 'messages', pa ovo resenje nije bas 'po knjiGi'...


Trenutno, dobijam, poslednju poruku iz diskusije, ali, raspored samih diskusija zavisi samo od ID-a, pa onda moze da se desi da mi najnovija poruka nekog korisnika (i njegova slika i ime) budu u samom dnu liste, pri ispisu, ako je diskusija zapoceta sa njim pre nekih drugih diskusija, a koje nemaju bas sveze poruke. Ajme, al' sam zapetljao, valjda ce uz primer biti jasnije, ahahahahaha.

Prikačeni fajlovi
 
Odgovor na temu

[es] :: MySQL :: Order by pre Grouop By

[ Pregleda: 1454 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

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