Pereiti prie turinio

Mysql laukelių reikšmių keitimas tarp įrašų.


Rekomenduojami pranešimai

Sveiki,

 

Skaičiau daug googlėje, bet konkrečiai nieko neradau, esmė tokia: darau rikiavimą mysql įrašų ir reikia viską sukišt į vieną užklausą.

 

Puslapyje gaunu parametrą aukstyn/zemyn priklausomai nuo kur kelsiu įrašą bei įrašo id.

Lentelės struktūra:

id | irasas | vieta

 

Kad būtų paprasčiau suprasti, paaiškinsiu labai elementariai kokie veiksmai atliekami:

 

$esama=SELECT vieta FROM irasai WHERE id='irasoid';

$busima=SELECT vieta FROM irasai WHERE vieta<$esama['vieta'] ORDER BY vieta DESC LIMIT 0,1;

UPDATE irasai SET vieta=$esama['vieta'] WHERE vieta=$busima['vieta'];
UPDATE irasai SET vieta=$busima['vieta'] WHERE vieta=$esama['vieta'];

 

pasistengiau kuo paprasčiau parašyti, kad suprastumėt ko noriu. kol kas visa tai sudėta į dvi atskiras užklausas, bet noriu sugrūsti į vieną.

 

ačiū už pagalbą iš anksto :)

Redagavo Mindaugas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Sveiki,

 

Skaičiau daug googlėje, bet konkrečiai nieko neradau, esmė tokia: darau rikiavimą mysql įrašų ir reikia viską sukišt į vieną užklausą.

 

Puslapyje gaunu parametrą aukstyn/zemyn priklausomai nuo kur kelsiu įrašą bei įrašo id.

Lentelės struktūra:

id | irasas | vieta

 

Kad būtų paprasčiau suprasti, paaiškinsiu labai elementariai kokie veiksmai atliekami:

 

$esama=SELECT vieta FROM irasai WHERE id='irasoid';

 

$busima=SELECT vieta FROM irasai WHERE vieta<$esama['vieta'] ORDER BY vieta DESC LIMIT 0,1;

 

 

mazai info cia ka parasei, jei gerai supratau tawo select'us, tai galima selecta pirma parasyti viduje to antro pvz: $busima=SELECT vieta FROM irasai WHERE vieta < (SELECT vieta FROM irasai WHERE id='irasoid' ) ORDER BY vieta DESC LIMIT 0,1. Bet ka butent nori daryt, tai placiau parasyk. Nes galiu klysti gerai nesuprates

Redagavo neoalik
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Rikiavimą įrašų. T.y. spaudai rodykles, ir įrašas keičiasi su aukščiau / žemiau esančiu pozicijomis.

Tarkim yra trys įrašai x,y,z tai jei noriu x įrašą nuleisti vieta žemiau, x ir y laukeliai "vieta" turi susikeisti vietomis. ir, deja, "vieta" neina iš eilės, t.y. nėr taip, kad x,y,z įrašų laukelis "vieta" atitinkamai 1,2,3 , gali būti ir 1,5895,41147

 

nežinau ar paaiškinau, niekad gerai man nesisekė savo programavimo nesklandumų išdėstyt :D

 

 

P.s. dabar į dvi užklausas viskas sudėta, čia taip parašiau į keturias (postu aukščiau) kad lengviau suprast būtų. tikslas - viena užklausa.

Redagavo Mindaugas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Sveiki,

 

Skaičiau daug googlėje, bet konkrečiai nieko neradau, esmė tokia: darau rikiavimą mysql įrašų ir reikia viską sukišt į vieną užklausą.

 

Puslapyje gaunu parametrą aukstyn/zemyn priklausomai nuo kur kelsiu įrašą bei įrašo id.

Lentelės struktūra:

id | irasas | vieta

 

Kad būtų paprasčiau suprasti, paaiškinsiu labai elementariai kokie veiksmai atliekami:

 

$esama=SELECT vieta FROM irasai WHERE id='irasoid';

$busima=SELECT vieta FROM irasai WHERE vieta<$esama['vieta'] ORDER BY vieta DESC LIMIT 0,1;

UPDATE irasai SET vieta=$esama['vieta'] WHERE vieta=$busima['vieta'];
UPDATE irasai SET vieta=$busima['vieta'] WHERE vieta=$esama['vieta'];

 

pasistengiau kuo paprasčiau parašyti, kad suprastumėt ko noriu. kol kas visa tai sudėta į dvi atskiras užklausas, bet noriu sugrūsti į vieną.

 

ačiū už pagalbą iš anksto :)

Kažkas turėtų būt panašaus :|

UPDATE irasai
   SET vieta = CASE irasoid
       WHEN {$esama} THEN {$busima}
       WHEN {$busima} THEN {$esama}
   END
WHERE vieta IN ({$esama},{$busima})

P.S. pas tave `vieta` stulpelis unikalus?

Redagavo luknei
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kažkas turėtų būt panašaus :|

UPDATE irasai
   SET vieta = CASE irasoid
       WHEN {$esama} THEN {$busima}
       WHEN {$busima} THEN {$esama}
   END
WHERE vieta IN ({$esama},{$busima})

P.S. pas tave `vieta` stulpelis unikalus?

 

unikalus, aš šitą pasirašęs dabar esu, man reikia toje pačioje užklausoje įterpti ir $esama bei $busima suradimą. ar tai aplamai įmanoma su mysql?

 

kad būtų kažkas panašaus į

 

UPDATE irasai
   SELECT vieta FROM irasai WHERE id='$id' as esama,
   SELECT vieta FROM irasai WHERE vieta<esama.vieta ORDER BY vieta DESC LIMIT 0,1 as busima
   SET vieta = CASE irasoid
       WHEN {esama.vieta} THEN {busima.vieta}
       WHEN {busima.vieta} THEN {esama.vieta}
   END
WHERE vieta IN ({esama.vieta},{busima.vieta})

 

čia žinoma į elementarias sintaksės klaidas dėmesio nekreipk, nes pagrindinis klausimas: kaip padaryti, kad tai veiktų?

Redagavo Mindaugas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

unikalus, aš šitą pasirašęs dabar esu, man reikia toje pačioje užklausoje įterpti ir $esama bei $busima suradimą. ar tai aplamai įmanoma su mysql?

 

kad būtų kažkas panašaus į

 

UPDATE irasai
   SELECT vieta FROM irasai WHERE id='$id' as esama,
   SELECT vieta FROM irasai WHERE vieta<esama.vieta ORDER BY vieta DESC LIMIT 0,1 as busima
   SET vieta = CASE irasoid
       WHEN {esama.vieta} THEN {busima.vieta}
       WHEN {busima.vieta} THEN {esama.vieta}
   END
WHERE vieta IN ({esama.vieta},{busima.vieta})

 

čia žinoma į elementarias sintaksės klaidas dėmesio nekreipk, nes pagrindinis klausimas: kaip padaryti, kad tai veiktų?

 

tai čia į dvi užklausas galima sutraukt:

SELECT vieta FROM irasai WHERE id='$id' or id='$id2';

o apskirtai, ar daug lauko užima atliekant tokias dvi užklausas?

 

EDIT

 

Ne taip supratau, nebežinau kaip dar galėtum paspartint savo užklausą :)

Redagavo luknei
Nuoroda į pranešimą
Dalintis kituose puslapiuose

tai čia į dvi užklausas galima sutraukt:

SELECT vieta FROM irasai WHERE id='$id' or id='$id2';

o apskirtai, ar daug lauko užima atliekant tokias dvi užklausas?

 

EDIT

 

Ne taip supratau, nebežinau kaip dar galėtum paspartint savo užklausą :)

ta prasme, pas mane dabar yra dvi užklausos, o noriu padaryti vieną. mano manymu kažkas panašaus turėtų būti į tą pavyzdį kur pateikiau, tik nežinau kaip taisyklingai sintaksiškai parašyt..

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...