[ kelja @ 09.01.2012. 10:35 ] @
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!

[ bogdan.kecman @ 09.01.2012. 12:36 ] @
ako ja dobro kontam pitanje samo treba ono DESC da zamenis sa ASC i radice to sto hoces?!
[ kelja @ 09.01.2012. 12:53 ] @
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...
[ bogdan.kecman @ 09.01.2012. 12:57 ] @
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)
[ kelja @ 09.01.2012. 13:26 ] @
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)...


[ bogdan.kecman @ 09.01.2012. 15:27 ] @
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
[ kelja @ 10.01.2012. 09:53 ] @
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]
[ bogdan.kecman @ 10.01.2012. 12:06 ] @
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
[ kelja @ 10.01.2012. 13:04 ] @
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.