Novo

Forum kao aplikacija na telefonu

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

  • 8 odgovora
  • 2.219 pregleda

Najnovija ↓

Order by pre Grouop By 09.01.2012. u 11:35 · pre 180 meseci #1
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!

Re: Order by pre Grouop By 09.01.2012. u 13:53 · pre 180 meseci #3
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...
Re: Order by pre Grouop By 09.01.2012. u 13:57 · pre 180 meseci #4
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)
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Re: Order by pre Grouop By 09.01.2012. u 14:26 · pre 180 meseci #5
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)...


Re: Order by pre Grouop By 09.01.2012. u 16:27 · pre 180 meseci #6
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
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Re: Order by pre Grouop By 10.01.2012. u 10:53 · pre 180 meseci
izmenjeno 1 put, poslednji put kelja 10.01.2012. u 11:05
  1. kelja10.01.2012. u 11:05zapis iz teksta poruke
#7
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
Re: Order by pre Grouop By 10.01.2012. u 14:04 · pre 180 meseci #9
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.

Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme