Jump to content
php.lv forumi

ID autoinkriments


Sephy

Recommended Posts

Labdien. Man tāds jautājums kā var noresetot autoinkrimentu lai tas iet pēc katras dzēšanas.

 

Piemērs ir 5 ieraksti:

id ieraksts

1 ieraksts1

2 ieraksts2

3 ieraksts3

4 ieraksts4

5 ieraksts5

 

Es izdzēšu 3sho un gribu lai id ir nevis 1,2,4,5 bet gan 1,2,3,4. Un ja es izdzēšu 5to es gribu nevis lai jaunajam ierakstam būtu nr 6 bet gan 5!

Link to comment
Share on other sites

Kāpēc lai vispār kāds kaut ko tādu gribētu darīt? ID ir unikāls identifikators, tas nav kārtas skaitlis vai tml.

 

Man ir aizdomas, ka tu mēģini risināt problēmu nepareizā virzienā. Varbūt labāk pastāsti ko tieši tu gribi panākt un tev ieteiks labāku risinājumu.

Link to comment
Share on other sites

Lieta tāda ka man ņem no tabulas ierakstus pēc id un ja pa vidu gadās tukšs id, tad nav labi. Vajadzētu kādu skriptu kur pārbauda vai tie ieraksti eksistē un ja neeksistē ņem nākošo. Vienu ierakstu jau viegli pārbaudīt, bet ko darīt ja nenoteikts skaits ierakstu? Php neesmu nekur redzējis repeat until ciklu ;D

Link to comment
Share on other sites

Kad ielādē ierakstu, nosaki ar kādu id ir iepriekšejais ieraksts un ar kādu ir nākošais ieraksts un attiecīgi pogās norādi tos.

 

Vai arī attēlo ierakstu nevis pēc id, bet atlasot ar LIMIT N,M, tad LIMIT15,1 nākamais ieraksts būs LIMIT 16,1 neatkarīgi no tā kāds ir tā id, attiecīgi tas būs solis tuvāk arī izpratnei par ierakstu sadalīšanu lapās attiecīgi LIMIT 150,10 būs 150.-159. ieraksts, kamēr LIMIT 160-10, būt 160.-169. ierkasts

Edited by codez
Link to comment
Share on other sites

$id = mysql_result(mysql_query('SELECT MIN(t1.ID + 1) AS nextID FROM web_members t1 LEFT JOIN web_members t2 ON t1.ID + 1 = t2.ID WHERE t2.ID IS NULL'),0);

pēc tam ievietojot rowu id laukā ieliec $id vērtību. tikai web_members aizstāj ar savu taublu.

bet kā jau tika minēts, ideja ir diezgan slikta, laigan dažos gadījumos varētu tiešām būt lietderīgi.

Edited by Swear
Link to comment
Share on other sites

$id = mysql_result(mysql_query('SELECT MIN(t1.ID + 1) AS nextID FROM web_members t1 LEFT JOIN web_members t2 ON t1.ID + 1 = t2.ID WHERE t2.ID IS NULL'),0);

pēc tam ievietojot rowu id laukā ieliec $id vērtību. tikai web_members aizstāj ar savu taublu.

bet kā jau tika minēts, ideja ir diezgan slikta, laigan dažos gadījumos varētu tiešām būt lietderīgi.

Nu šis risinājums sako vienkārši nemērā, nav vērts kāpt uz grābekļa, ar kuru jau ntie cilvēki ir norāvušies pa pieri.

Vajadzētu pieturēties pie koncepta, ka ID - tas ir unikāls (un TIKAI) identifikators, tas nav nekāds numurs pēc kārtas.

Numurus pēc kārtas iegūst atlasot datus. Ja nu ļoti vajag tos nemainīgus (tipa pavadzīmēm utml), kur reāli to prasa likumdošana, tad tam ir atsevišķs lauks un nevis ID.

Citādi pats sev radīs daudzas problēmas:

- ja vairāki lietotāji veic darbības vienlaicīgi, dabūs to pašu nākošo id

- ātrdarbības problēmas, jo tāda nākošā id atlase ir krietni lēnāka nekā autoincerment

- ko darīt, ja kāds ieraksts jādzēš, vai tagad pārnumurēt visus nākošos idus un arī visus saistītos ierakstus (FK)

- utt, utjp

 

Gints Plivna

http://datubazes.wordpress.com/

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

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

Loading...
×
×
  • Create New...