Jump to content
php.lv forumi

kā dabūt lai id skaitās no 1


curry

Recommended Posts

Sveiki!

 

Tātad man ir tabula ar lietotājiem, visās ir sava informācija, tur username, mīļākā krāsa, mīļākais operdziedātājs utt.

Katram userim ir savs id, bet id ir sākti skaitīt no 800 (pazaudēja db un nejēdza uzlikt lai no 1 sākas atkal) , un protams arī pa vidum useri ir tikuši automātiski dzēsti utt, līdz ar to man ir ~1000 useri ar id sākot no 801 - ~ 3000.

 

 

Būtu ļoti labi, ja es varētu dabūt tos useru id dabūt no 1 - līdz pēdējam.

Nekādi citi dati (posti, komentāri utt) līdzi nenāks, tāpēc tā varu atļauties izdarīt.

 

Nedz šeit nedz kur citur nespēju atrast informāciju kā to panākt.

Droši vien vajadzētu būt pavisam vieglam kverijam.

Kāds varētu palīdzēt?

Link to comment
Share on other sites

while( lietotaju_skaits == i){
update set id = 'i'  where id ='old_id';
i++;
}

Link to comment
Share on other sites

Kas vainas, ka id nav no 1?

Nez, man pašam labāk patīk kad tie lietotāji ir no - līdz, nerada sajūtu "ooo jau 1000'ais useris", lai gan īstenībā aktīvi ir tikai es un mans feiks :)

 

UPDATE tavatabula,(SELECT @a:=0) as t set id=(@a:=@a+1);

Liels Paldies par ļoti ātro un labo atbildi, pats nebūtu izdomājis!

Edited by curry
Link to comment
Share on other sites

Ieteiktu ar tādu figņu nepiesārņot galvu. Un tagad, kad kādu izdzēsīs sāksi atkal skaitīt no 1? Lai dabūtu skaitu tev ir count(*), lai dabūtu numuru pēc kārtas, pameklē googlē vai šai pašā forumā, un iesaku uztvert id kā prastu unikālu numuru bez nekādas jēgas, vienkārši kuru var izmantot unikālai identificēšanai. OK varbūt šajā gadījumā Tu vari atļauties pārnumurēšanu, bet normāli, tā nebūs.

 

Gints Plivna

http://datubazes.wordpress.com

Link to comment
Share on other sites

Gadījumi ir tādi, kad Tev būs tabula/s ar N miljoniem ierakstu un bariņš citu tabulu, kas referencējas uz to, kuru Tu gribi pārnumurēt un/vai scenārijs, kad ierakstu dzēšana notiek bieži.

Ierakstu dzēšana ir pilnīgi normāls process, tāpat kā ierakstu pievienošana, vai koriģēšana. Attiecīgi vēlme kaut ko pārnumurēt ir pilnīgi bezjēdzīga, jo rīt/pēc stundas/pēc minūtes/pēc sekundes kāds jau atkal kaut ko būs izdzēsis un Tev nāksies darbu sākt no gala. Jau senie grieķi zināja, ka tāds darbs nekas labs nevar būt - skat Sīsifa akmens ;)

 

Pie tam vēl - šāda pieeja (vēlme dabūt numurus pēc kārtas bāzē) sagrauj tādu lietu kā mērogojamību, jo:

1) pirmkārt ar izdzēstiem ierakstiem vispār nekā jēdzīgi nevar cīnīties

2) pat ja tos nedzēš, tad tas nozīmē, ka vienlaicīgi vairāk par 1 ierakstu reizē pievienot nevar un tas nozīmē, ka, ja kāds lietotājs domā, ko nu tagad darīt - likt iekšā vai nē, tad tikmēr visi citi lietotāji gaida uz to domātāju, līdz viņš izdomās, jo nevar jau zināt - vai viņš ieliks to ierakstu - un tad citiem būs jāņem N + 1, vai neieliks un tad būs jāņem N.

 

Šajā konkrētajā gadījumā tas protams nav īpaši svarīgi, vai numurē, vai nē. Galvenais ir apzināties sekas vispārīgā gadījumā. Tu vari iet pāri arī pie sarkanās gaismas, ja tuvumā nevienas mašīnas nav. Bet Tevi sabrauks, ja Tu iesi pāri pie sarkanās gaismas intensīvas satiksmes apstākļos. Šeit ir tieši tas pats.

 

Gints Plivna

http://datubazes.wordpress.com

Link to comment
Share on other sites

Pirmo postu rūpīgi izlasām: "Nekādi citi dati (posti, komentāri utt) līdzi nenāks, tāpēc tā varu atļauties izdarīt."

ieliekam foreign keys un mans dotais kverijs strādā bez kļūdām arī, ja ir references uz user id.

 

 

 

Gint, bet applikācijas izstrādes vai uzlabošanas gaitā ar datiem strādā arī pats cilvēks un jārēķinās, ka cilvēkam nav galvā tabulu indeksi. Cilvēks šos datus uztver intuitīvi, tāpēc to normalizēšana nav nekas peļams.

Edited by codez
Link to comment
Share on other sites

ID resetošana nav normalizēšana. Tā ir kaķa raustīšana aiz astes.

 

Protams, noresetot jau vienmēr var tā, ka iekšēji iekš DB nekas nesabrūk, bet ko darīsi, piemēram, ja tie ID tiek izmantoti iekš publiskiem linkiem ? Tad cilvēki, kas būs sabukmarkojuši lietotāju profilus, aplauzīsies.

Edited by andrisp
Link to comment
Share on other sites

Gint, bet applikācijas izstrādes vai uzlabošanas gaitā ar datiem strādā arī pats cilvēks un jārēķinās, ka cilvēkam nav galvā tabulu indeksi. Cilvēks šos datus uztver intuitīvi, tāpēc to normalizēšana nav nekas peļams.

 

Aplikācijas izstrādes vai uzlabošanas gaitā normāli vajadzētu strādāt ar izstrādes un/vai testa vidi. Eeee, protams, ja tas ir mans mazais projektiņš par dažiem latiem mēnesī, tad diez vai tāda būs. Izstrādes un/vai testa vidē dati ne vienmēr ir tādi paši kā produkcijā, līdz ar to runāt par kaut kādu idu atbilstību vispār nav jēgas.

No otras puses skaidrs, ka cilvēks datus uztver intuitīvi, tāpēc man nenormāli riebjas GUIDI, kas uzģenerē kaut kādu vājprātīgu baitu virkni, kuru var tikai ctrl+c un ctrl+v. Tikai es īsti neiebraucu kur ir doma, ja tev līdz šim bija ieraksts ar id 8374 un pēc pārnumurēšanas tas kļūst 6457, tad vai tad ir vieglāk to atcerēties? :O

 

Vienīgo cilvēcisko jēgu es šeit varētu saprast, ka it kā ids pie reizes norāda arī skaitu, tb ja Tu zini, ka Tev ir lielākais id 753, tad Tev ir arī tikpat ierakstu. Es no šādas domas esmu jau atbrīvojies ļoti sen (pat ja man kādreiz tāda ir bijusi) un tas man ir tikai palīdzējis nesajaukt galvu. Pie tam ir aplikācijas kur lieto tā saucamās dabiskās atslēgas (natural keys), piemēram e-pasts, vai vārds, uzvārds, vai niks. Nu un ko tad tu darīsi visus nikus pārnumurēsi sākot no a, b, c, ..., aa, ab, ac, ... utt?

 

Surogātatslēgas (unikālu id ģenerēšanas) dziļā doma jau ir tāda, ka tas ir vienkārši unikāls identifikators un viss. VISSS. Tam nav nekāda jēga, pilnīgi nekāda. Tas netiek atvasināts no datiem, tas nenozīmē kaut kādu skaitu, neko. Jo tiklīdz kā Tu sāc tam piešķirt, kādu nozīmi, tā tu sāc zaudēt tās labās īpašības un paliek tikai sliktās :)

 

Ar domu darīt tā var sava mazajā sistēmiņā, bet taisot kaut ko lielāku ar to nevar tikt cauri, tāpēc vieglāk ir arī mazajā sistēmiņā nesaspringt par nevajadzīgām lietām.

 

Gints Plivna

http://datubazes.wordpress.com

Link to comment
Share on other sites

Beidziet strīdēties :D

Es negrasos pēc kāda laika atkal darīt šo pašu darbību.

Man vienkārši (ja es būtu parasts Lietotājs manā lapā) liktos ļoti dīvaini, ja lapas administratoram būtu id piemēram 801, nevis 1.

 

Un kā jau biju domājis - mazs, samērā viegls kods visu to listi pārkārto un manuprāt izskatās ērtāk/skaistāk/labāk.

 

Un kā jau teicu - manā gadījumā līdzi nāk tikai users.tabula, tātad es to varu atļauties izdarīt.

Ja būtu posti utt - protams, pat nedomātu par šo opciju.

 

Paldies par padomiem jebkurā gadījumā!

Link to comment
Share on other sites

×
×
  • Create New...