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

Prevezivanje pokazivača putem jednog UPDATE querija?

[es] :: MySQL :: Prevezivanje pokazivača putem jednog UPDATE querija?

[ Pregleda: 3252 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

noviKorisnik
Dejan Katašić
Novi Sad

Član broj: 13216
Poruke: 4533
194.247.222.*

Sajt: www.novikorisnik.net


+5 Profil

icon Prevezivanje pokazivača putem jednog UPDATE querija?01.04.2004. u 14:06 - pre 198 meseci
Recimo da je tabela predstavljena kao pokazivačka struktura:

tabela (id, previous)

Ako sad želim da oslobodim neki element iz liste, potrebno je da se izvrši prevezivanje slogova, odnosno da slog koji je pokazivao na njega sada pokazuje na njegovog prethodnika.

Ovako (uz malu pomoć PHP-a):

SELECT previous FROM tabela WHERE id = '$id'

UPDATE tabela SET previous = '$previous' WHERE previous = '$id'

Interesuje me: isti ovaj efekat ali samo u jednom queriju, da li je uopšte moguće?
Prikačeni fajlovi
 
Odgovor na temu

-zombie-
Tomica Jovanovic
freelance programmer
ni.ac.yu

Član broj: 4128
Poruke: 3448
195.252.85.*

Sajt: localhost


+4 Profil

icon Re: Prevezivanje pokazivača putem jednog UPDATE querija?01.04.2004. u 14:39 - pre 198 meseci
probaj multi-table update (minimum valjda mysql 4.1+):

Code:
UPDATE tabela t1, tabela t2 
SET t1.previous=t2.previous 
WHERE t1.previous=t2.id AND t2.id='$id'


http://www.mysql.com/doc/en/UPDATE.html

 
Odgovor na temu

noviKorisnik
Dejan Katašić
Novi Sad

Član broj: 13216
Poruke: 4533
194.247.222.*

Sajt: www.novikorisnik.net


+5 Profil

icon Re: Prevezivanje pokazivača putem jednog UPDATE querija?01.04.2004. u 15:18 - pre 198 meseci
Super - gledao sam neku matoru verziju Manuala koja ne poznaje multi...
Prikačeni fajlovi
 
Odgovor na temu

noviKorisnik
Dejan Katašić
Novi Sad

Član broj: 13216
Poruke: 4533
*.dialup.neobee.net.

Sajt: www.novikorisnik.net


+5 Profil

icon Re: Prevezivanje pokazivača putem jednog UPDATE querija?01.04.2004. u 23:14 - pre 198 meseci
Kada već postoji varijanta za multiple-table update, možda bi jednim querijem mogla da se odradi kompletna selidba sloga na novu poziciju. Id sloga je $id, a novi prethodni $newprevious:

Code:
UPDATE tabela t1, tabela t2, tabela t3
SET t1.previous = t2.previous,
    t2.previous = t3.previous,
    t3.previous = t2.id
WHERE t1.previous = t2.id
  AND t2.id = '$id'
  AND t3.previous = '$newprevious'


Ovde ostaje otvoreno nekoliko pitanja.

Ukoliko tabela sadrži prostu listu (listu koja ima početak i kraj, početni slog koji nema svog prethodnika i poslednji koji ne prethodi nekom drugom), šta se dešava u graničnim slučajevima - ako su $id ili $newprevious adrese poslednjeg sloga liste:
- Propada li pokušaj premeštanja sloga?
- Ako propada, postoji li neki drugi način spajanja tabela ili dodela vrednosti koji obezbeđuje uspeh i u ovim slučajevima?

Ove dileme moguće je izbeći formiranjem kružne liste, ali se u tom slučaju na nekom drugom mestu mora čuvati informacija o vodećem elementu liste.
Prikačeni fajlovi
 
Odgovor na temu

-zombie-
Tomica Jovanovic
freelance programmer
ni.ac.yu

Član broj: 4128
Poruke: 3448
195.252.85.*

Sajt: localhost


+4 Profil

icon Re: Prevezivanje pokazivača putem jednog UPDATE querija?01.04.2004. u 23:55 - pre 198 meseci
uh, jel možeš da probaš da to objasniš, samo drugim rečima..

ja te uopšte nisam ukapirao, šta pokušavaš da odradiš?

 
Odgovor na temu

noviKorisnik
Dejan Katašić
Novi Sad

Član broj: 13216
Poruke: 4533
194.247.222.*

Sajt: www.novikorisnik.net


+5 Profil

icon Re: Prevezivanje pokazivača putem jednog UPDATE querija?02.04.2004. u 08:37 - pre 198 meseci
Eto mene u ulozi prevodioca ;)

Izgleda da je bilo najlakše da se nacrta jedan primer:



Ovo je obična lista gde prvi (sivi) element pokazuje na "ništa" što ga i čini prvim u listi. Ostali slogovi su lepo složeni tako da svaki ima jedinstvenog prethodika. Na poslednji (plavi) element ne pokazuje niko...

Kod kružne liste bi sivi element pokazivao na plavi, a na nekom drugom mestu bi se pamtilo da je baš sivi element prvi u listi.

Crvena strelica označava željenu akciju. Crvenom elementu treba da prethodi žuti.



Druga slika pokazuje da tu ipak ima malo više pretumbacija... Precrtane crne strelice treba da pređu u odgovarajuće crvene. Ovde je bitan redosled izmena da ne bi došlo do gubitka informacija (zna se adresa crvenog i žutog elementa...). Na kraju:



Postavljena dilema odnosi se na situaciju ako bi sada pokušali jednu od sledeće dve akcije:



Znači, ako želimo da plava pokazuje na žutu ili obrnuto - ne nalazi se element kome je plava prethodnik. Sada bi sledila pitanja u vezi dileme oko querija...
Prikačeni fajlovi
 
Odgovor na temu

-zombie-
Tomica Jovanovic
freelance programmer
ni.ac.yu

Član broj: 4128
Poruke: 3448
*.beotel.net

Sajt: localhost


+4 Profil

icon Re: Prevezivanje pokazivača putem jednog UPDATE querija?02.04.2004. u 14:54 - pre 198 meseci
samo da ti se javim da sam video i (valjda) razumeo šta želiš da odradiš.. ti želiš da koristiš bazu za skladištenje, a SQL za izvršenja operacija nad jednom povezanom listom.

samo meni se to ne čini kao štivo za "laganu (usputnu) diskusiju na forumu", već malo ozbiljnije teorisko pitanje (a možda i grešim, i za sve operacije postoji rešenje u par koraka ;)..

zato savet da možda pretražiš na google, jer je verovatno već bilo istraživanja i radova na tu temu.. verovatno se nisi ti prvi toga setio.. :-P

 
Odgovor na temu

noviKorisnik
Dejan Katašić
Novi Sad

Član broj: 13216
Poruke: 4533
*.dialup.neobee.net.

Sajt: www.novikorisnik.net


+5 Profil

icon Re: Prevezivanje pokazivača putem jednog UPDATE querija?02.04.2004. u 21:24 - pre 198 meseci
Dobro, može to da se izvede bez problema korištenjem tri uzastopna ažuriranja - sigurno je sigurno -
Citat:
UPDATE tabela t1, tabela t2
SET t1.previous = t2.previous
WHERE t1.previous = t2.id AND t2.id = '$id';

UPDATE tabela
SET previous = '$id'
WHERE previous = '$newprevious';

UPDATE tabela
SET previous = '$newprevious'
WHERE id = '$id';

Ne vidim šta je ovde za toliko ozbiljno teorijsko razmatranje - upotreba pokazivačke tabele odgovara isključivo zato što nije predviđeno parcijalno selektovanje delova strukture, znači koristi se isključivo jedan "SELECT * FROM tabela". Da postoje zahtevi za drugačijim tipom selekcije, dobro bih se počešao pre upuštanja u pokazivače.

Konkretno je struktura u stvari tipa binarnog stabla - direktorijumska organizacija takva da se poddirektorijumi pojavljuju u tačno određenom redosledu (to je ta povezana lista).
 
Odgovor na temu

[es] :: MySQL :: Prevezivanje pokazivača putem jednog UPDATE querija?

[ Pregleda: 3252 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

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