Mārtiņš ([info]skalpelis) rakstīja [info]koderi kopienā,
@ 2003-07-07 00:47:00

Previous Entry  Add to memories!  Tell a Friend!  Next Entry
MySQL 3.23 vs. 4.0
Viena no uzkrītošākajām atšķirībām, ko esmu pamanījis starp MySQL 3.23 un 4 ir tā, ka 3.23 nav tādas operācijas kā xor jeb ^.

Xor būtība - varētu tulkoties kā vai arī - binārā operācija - atgriež true tad, ja tikai viens no abiem apgalvojumiem ir patiess, t.i.:
true ^ true = false
true ^ false = true
false ^ true = true
false ^ false = false

Taču, kā jau esmu dzirdējis, nafig tāds vajadzīgs?
Pieņemsim, ir tabula ar 5000 rindām, katrā ir statuss, kas atzīmējas ar 1 vai 0. Kā varētu rīkoties, ja visām rindām vajadzētu uzstādīt pretējo statusu? Varētu uzrakstīt skriptu, kas katras rindas statusu izvelk laukā, tad ar kaut kādus skriptu, popularitātes pēc pieņemsim, php, apgriežam uz pretējo un ievietojam iekšā. 5001 querys kā minimums. Jo vairāk, ja tas ir nepieciešams pietiekami bieži, tas sanāk nepiedodami daudz, protams.
Priekš tā arī var izmantot paredzēts xor.
'update table set status = status ^ 1' (tas ir tikai piemērs, protams).
voila

Stāsts, protams, nav par to. Doma man bija tāda - bija uzrakstīts php skripts, kas līdzīgā veidā izdarījās ar mysql. Uz datora, uz kura testējos, stāv uzlikts MySQL 4.0.13. Savukārt uz paredzamā servera, uz kura tam būs jābūt, ir MySQL 3.23 (precīzi nepateikšu, kurš, nezinu).
Un gribas atrisināt šo problēmu, tomēr ar ne vairāk kā vienu queryu. Tā rezultātā tapa:
'update table set status = abs(status - 1)'


(Lasīt komentārus)

Nopūsties:

No:
Lietotājvārds:
Parole:
Ievadi te 'qws' (liidzeklis pret spambotiem):
Temats:
Tematā HTML ir aizliegts
  
Ziņa:

Gandrīz jau aizmirsu pateikt – šis lietotājs ir ieslēdzis IP adrešu noglabāšanu. Operatore Nr. 65.
Neesi iežurnalējies. Iežurnalēties?