Pēcis Beisikāns' Journal
View:Personal Journal.
View:Friends.
View:Calendar.
Missed some entries? Then simply jump to the previous day or the next day.

Monday, July 7th, 2003

Subject:MySQL 3.23 vs. 4.0
Time:12:47 am.
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)'
Comments: Read 12 or Add Your Own.

Pēcis Beisikāns' Journal

View:User Info.
View:Friends.
View:Calendar.
View:Memories.
Missed some entries? Then simply jump to the previous day or the next day.