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

Order by something. Kako ovo izvesti

[es] :: PHP :: PHP za početnike :: Order by something. Kako ovo izvesti

[ Pregleda: 712 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Milos911
Serbia

Član broj: 219127
Poruke: 1230
*.telenor.co.yu.



+303 Profil

icon Order by something. Kako ovo izvesti06.10.2009. u 23:14 - pre 133 meseci
Code:

1.Milosh
2.Djura
3.Pera
4.Zika

Imam ove redove u bazi. Zelim da dozvolim korisnicima da ih sortiraju kako oni hoce. Znaci da ako im se svidi stave da ide 1342, pa posle da promene u 4213. E sad ne pada mi kako izvedem ovo. Najveci problem je to sto bih morao da menjam brojeve koji oznacavaju poziciju reda svaki put kad se dogodi neka promena. Napr ako korisnik zeli da red broj 20 stavi na prvo mesto ja bih ostalih 19 morao da promenim. Imate li neku ideju kako bih ovo mogao da izbegnem. Meni nista ne pada na pamet :(
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Order by something. Kako ovo izvesti06.10.2009. u 23:53 - pre 133 meseci
Dodaj numerički primarni ključ (najbolje automatski brojač) i čuvaj posebno vrednosti, a posebno poredak. Npr:

Tabela `podaci`:
Code:

id   ime
1    Miloš
2    Đura
4    Žika
5    Pera
6    Mika
...


PK je id.

Tabela `poredak`:
Code:

korisnik_id   mesto   podaci_id
...
322           1       5
322           2       1
323           1       1
323           2       4
323           3       2
...


PK tabele poredak je (korisnik_id, mesto).
FK su korisnik_id (nad nekom tabelom korisnika) i podaci_id (nad tabelom podaci). Oba treba da brišu unos kada se referencijalni unos obriše ili promeni.

Odgovarajući poredak za korisnika 323 onda lako dobijaš sa:
Code:

SELECT *
FROM podaci
LEFT JOIN (
  SELECT *
  FROM poredak
  WHERE korisnik_id = 323
) AS poredak ON ( podaci.id = poredak.podaci_id )
ORDER BY poredak.mesto ASC , podaci.id ASC


Nove vrednosti ili kada korisnik nije odredio poredak pojavljuju se na vrhu pre svih u redosledu kolone id u tabeli podaci. Ako ti trebaju na kraju, upit se lako promeni. Možeš da dodaješ i uklanjaš unose iz podaci jer ti PK garantuje vezu sa poredak.

Primer rezultata:
Code:

5   Pera   NULL   NULL   NULL
6   Mika   NULL   NULL   NULL
1   Miloš  323    1      1
4   Žika   323    2      4
2   Đura   323    3      2


Ne isključujem da postoji i bolje rešenje.
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

Milos911
Serbia

Član broj: 219127
Poruke: 1230
*.telenor.co.yu.



+303 Profil

icon Re: Order by something. Kako ovo izvesti07.10.2009. u 10:44 - pre 133 meseci
Hvala na trudu i opsirnom odgovoru :) Lose sam se izrazio gore kad sam rekao da zelim da omogucim korisnicima skripte to i to. Ovo nije visekorisnicka aplikacija vec xhtml wysiwyg editor.
Citat:

Nove vrednosti ili kada korisnik nije odredio poredak pojavljuju se na vrhu pre svih u redosledu kolone id u tabeli podaci. Ako ti trebaju na kraju, upit se lako promeni. Možeš da dodaješ i uklanjaš unose iz podaci jer ti PK garantuje vezu sa poredak.

A sta ako mi trebaju jedno mesto iznad trenutnog :) Ne bih im dozvolio da sami upisuju pozicniju, neko kad prvi put dodaju link napr on se automatski doda na dno. Pa onda imaju dugme za gore, i dugme za dole.
Da napomenem da ako imas (ili ako neko drugi ima) neku ideju, ne mora da se muci da pise kod. Dovoljna mi je samo ideja kako to moze da se uradi, kod cu ja lako napisati...
Hvala ti jos jednom :)
 
Odgovor na temu

Goran Rakić
Beograd

Moderator
Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Order by something. Kako ovo izvesti07.10.2009. u 10:55 - pre 133 meseci
Ne razumem tvoje podpitanje, ako dodaš novi unos u `podaci` on će se pojaviti u rezultatu u redosledu vrednosti svog id polja. Ako korisnik doda i neki poredak, onda to ima prioritet. Polje `korisnik_id` lako možeš da izbaciš, ili u tvom slučaju zameniš sa `sajt_id`, `strana_id`,...
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

Milos911
Serbia

Član broj: 219127
Poruke: 1230
*.telenor.rs.



+303 Profil

icon Re: Order by something. Kako ovo izvesti10.10.2009. u 12:35 - pre 133 meseci
Ok sad sam razumeo ono sto mi nije bilo jasno. Nikad nisam koristio AS,ON, LEFT JOIN, pa mi nesto nije bilo jasno, ali sad jeste (posle 2h experimentisanja :D)
Hvala jos jednom
 
Odgovor na temu

[es] :: PHP :: PHP za početnike :: Order by something. Kako ovo izvesti

[ Pregleda: 712 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

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