Avatar billede pkdkk Nybegynder
22. november 2007 - 10:05 Der er 9 kommentarer og
1 løsning

MySQL Bitwise AND?

Hey..

Forsøger at gennemskue noget kode, hvor jeg støder på tegnet & i en SQL sætning.. Kan nogen forklare på forståeligt sprog hvad dette betyder?

SELECT * FROM `task` WHERE task.Properties & 3
Avatar billede pidgeot Nybegynder
22. november 2007 - 10:19 #1
Som du selv skriver i overskriften, så er det en bitwise AND (bitvis på dansk).

Hvis du vil have en forklaring af hvad bitvis AND er:
Forestil dig at du tager de to tal og skriver i det binære talsystem (lad os bruge 14 som værdi for task.Properties):

14=1110
3=0011

Bitvis AND giver, for hver enkelt bit i sekvensen, 1 hvis begge input er 1, og 0 hvis et af dem er 0. Det resulterer dermed i:

14=1110
&3=0011
-------
  0010=2
Avatar billede smitten1 Nybegynder
22. november 2007 - 10:25 #2
skrevet på en alternativ måde

WHERE task.Properties IN (1,2,3)
Avatar billede smitten1 Nybegynder
22. november 2007 - 10:26 #3
det var vist noget pjat. Andre værdier har selvfølgelig også de nedeste bit sat :)
Avatar billede pkdkk Nybegynder
22. november 2007 - 10:37 #4
Tak for et godt svar!

Men jeg må ærligt talt erkende at jeg ikke helt er med på hvordan eller hvorfor det bliver brugt i mit eksempel.

SELECT * FROM `task` GROUP BY Properties
= 1,2,3,4,5,6,7,8,9,11,12,13,14,15

SELECT * FROM `task` GROUP BY Properties & 3
= 1,2,3,5,6,7,9,11,13,14,15

Kan du på en måde forklare hvorfor den undlader 4,8,12 i sidste eksempel?
Avatar billede pkdkk Nybegynder
22. november 2007 - 10:38 #5
Hov... sidste ser selvf. sådan ud:
SELECT * FROM `task` WHERE `Properties` & 3 GROUP BY `Properties`
Avatar billede pidgeot Nybegynder
22. november 2007 - 10:39 #6
Ja da. Værdierne for hhv. 4, 8 og 12  i det binære talsystem er:

0100
1000
1100

I alle tre tilfælde vil bitvis AND med 3 give 0, fordi ingen af de samme bits er sat - og som du måske ved, så evalueres tallet 0 til falsk, og alt andet til sand.
Avatar billede smitten1 Nybegynder
22. november 2007 - 10:40 #7
den snupper alle værdier, hvor en af eller de to første bit er sat

1=0001
2=0010
3=0011
4=0100 * begge de første to bit er 0
5=0101
8=1000 *
9=1001
12=1100 *
Avatar billede pkdkk Nybegynder
22. november 2007 - 10:58 #8
Tak til jer begge..
smitten1<< svar venligst hvis du også ønsker point. :)
Avatar billede smitten1 Nybegynder
22. november 2007 - 11:01 #9
beløn du bare pidgeot med alle 30 point :)
Avatar billede pkdkk Nybegynder
22. november 2007 - 13:11 #10
OK :) og tak for hjælpen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester