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.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

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