Pereiti prie turinio

HELP! Reikia MySql užklausos.


Rekomenduojami pranešimai

Sveiki, užstrigau ties viena vieta. Formuoju užklausą, kuri turi grąžinti mažiausią nepanaudotą ID.

 

Pvz. stulpelyje turime egzistuojančius ID: 1, 2, 3, 5, 6

Kaip matome 4 yra nepanaudotas ir mano minėta užklausa būtent šią reikšmę turėtų ir grąžinti.

 

Užklausą turiu, bet bėda matosi apvesta raudonai ir tai vos tikrinant lentelę su 5000 įrašų:

 

post-73692-0-13373400-1464089546_thumb.png

 

Gal kam nors tekę susidurti su tokia situacija ir gali pagelbėti? Jeigu ne, manau teks atsisakyti šios idėjos.

Redagavo FaceToFace
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Aš tai nelabai suprantu kam tau išnaudot neegzistuojančius idus :D Tiesiog visalaik kurk egzistuojančio didžiausio+1, arba auto increment užsidėk ;)

 

 

Suprantu, ką nori pasakyti, bet esmė tame, kad sistema padaryta taip jog kiekvienas vartotojas turi turėti po unikalų vienodo ilgio ID ir viskas sueina į SMS užsąkymus. Visi ID saugomi SMS service DB ir jie automatiškai prasitesinėja, kol pats vartotojas nenutraukia paslaugos.

Taip, čia tas kas darė šitą užsąkymų sistemą, padarė labai blogai, bet dabar perdarinėti sistemą iš esmės negalima, nes visi užsakovai nueitų "šaibom".

 

Todėl ir reikia išnaudoti visus atsilaisvinusius ID, nes kombinacijų kiekis vienodo ilgio kode ribotas.

Redagavo FaceToFace
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Paieškojau ir radau pavizdį.

 

SELECT t1.id + 1 FROM vartotojai t1 WHERE NOT EXISTS ( SELECT id FROM vartotojai t2 WHERE t2.id = t1.id + 1 ) LIMIT 1

 

Query took 0.1429 seconds. Su 32 761 įrašų.

 

Jeigu nieko neranda, rašo busimą id.

Redagavo katum
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Paieškojau ir radau pavizdį.

 

SELECT t1.id + 1 FROM vartotojai t1 WHERE NOT EXISTS ( SELECT id FROM vartotojai t2 WHERE t2.id = t1.id + 1 ) LIMIT 1

 

Query took 0.1429 seconds. Su 32 761 įrašų.

 

Jeigu nieko neranda, rašo busimą id.

 

Bandžiau ir šitą. Iš esmės tas pats ir jeigu tas laisvas ID būna pradžioje, tai randa abiem atvejais greitai. Kuo tas laisvas ID toliau arba jo išvis nėra, tai tada bėdos.

 

Tarkim ieškota ir nerasta laisvo tarp 2000 įrašų

post-73692-0-67113300-1464099208_thumb.png

 

Jeigu tų ID iš tikro nedaug, tai gali tiesiog visus galimus ID susirašyt į atskirą lentelę. Tada paprasčiausiai:

SELECT MIN(id) FROM all_possible_ids WHERE NOT IN (SELECT id FROM users)

 

Taip, čia mano planas B.

Redagavo FaceToFace
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ą...