Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> mysql odwrócenie jednego bitu w int
ChrisB
post 13.02.2010, 13:33:38
Post #1





Grupa: Zarejestrowani
Postów: 73
Pomógł: 4
Dołączył: 13.01.2004
Skąd: Bielsko-Biała

Ostrzeżenie: (0%)
-----


chcę przenieść dziesiątki pól tinyint przechowujące różnego rodzaju ustawienia graczy (0,1) do jednego pola int, nie specjalnie zależy mi na czytelności, ani na przeszukiwaniu wg tych pól więc to nie problem

problem mam ze zmianą jednego bitu przy przestawianiu jakiejś opcji

  1. UPDATE uzytkownik SET ustawienia=ustawienia&~wybranybit WHERE ....


zmienia z 1 na 0 dany bit

  1. UPDATE uzytkownik SET ustawienia=ustawienia|wybranybit WHERE ....


zmienia z 0 na 1


a jak ustawić by zależnie od zapisanego w bazie obracał go jednym i tym samym zapytaniem...?


--------------------
gragieldowa.pl
Go to the top of the page
+Quote Post
erix
post 13.02.2010, 13:36:20
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




http://dev.mysql.com/doc/refman/5.0/en/case-statement.html


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
ChrisB
post 13.02.2010, 14:18:06
Post #3





Grupa: Zarejestrowani
Postów: 73
Pomógł: 4
Dołączył: 13.01.2004
Skąd: Bielsko-Biała

Ostrzeżenie: (0%)
-----


człowiek chce coś uproscic a tu zawsze cos sie $!#$! biggrin.gif
w teorii "~" - bitwise not - powinno załatwić sprawę no ale zwraca błąd niestety;/

  1. UPDATE uzytkownik SET ustawienia=case when ustawienia&1 then ustawienia&~1 else ustawienia|1 end WHERE ...


dzięki za link - dałem takie coś, działa poprawnie, powinienem cos tu zmienic czy jest wszystko ok? (dopiero raczkuje jeśli chodzi o operatory bitowe i bardziej skomplikowane zapytania - a chce to wrzucic na serwer odrazu biggrin.gif)


--------------------
gragieldowa.pl
Go to the top of the page
+Quote Post
erix
post 13.02.2010, 15:04:28
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A co tu zmieniać? winksmiley.jpg Więcej tu nie zmienisz, jeśli działa, to działa. winksmiley.jpg


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Mchl
post 13.02.2010, 18:59:56
Post #5





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


Zamiast tego możesz robić XOR ( ^ ) z maską.

  1. SELECT 8^2; -- b1000 ^ b0010 = b1010 = d10
  2. SELECT 10^2; -- b1010 ^ b0010 = b1000 = d8


Ten post edytował Mchl 13.02.2010, 19:00:33
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 12:41