2014-12-23 34 views
0

我一直triying爲沒有任何的運氣一整天做到這一點。搜索按位狀態

一個快速的解釋:我有我們,如果有人能夠通過他的能力場搜索做一個攻擊或不符合該遊戲系統。

To be able to use the "flame" skill you need to "know" how to do it, it requires the 7th and the 1st bit ON (10 bits): 0000000101 

And this would be a player "knowledge" field where we put 1s if they did some work before (10 bits where 1st bit is fire, second bit is ice, third bit is sorcery and so on): 0010110101 

我的問題,當我嘗試,如果第一或第三位是ON或OFF來比較,如果一個球員「知道」或沒有這種技能,因爲我一直沒能只是比較開始。

這將是理想的例子:

消防技能:XXXXXXX1X1 知識:1X1XX1X1X1

在這個例子中,玩家將能夠,因爲他的第一和第三位是ON做@fire攻擊@即使是玩家「知道」許多其他東西(第10,第8,第5等等也是如此)

將所有內容拆分爲10個不同的字段並不是一種選擇,因爲它已經可以工作並且需要大量工作來改變其他所有內容。

我希望你能幫助我,一日一次詢問,但使用多年計算器。

謝謝。

+0

你不能只拿到2個位置你需要什麼?如知識[0]和知識[2],如果兩者都是1,他就可以使用火焰。 – Tiago

+0

如果你已經擁有10位技能,你可以使用口罩@Barmar答案。如果你只有職位,那麼檢查知識的位置是最好的。 – Tiago

回答

1

爲了測試在掩模的所有位是否爲上,使用:

WHERE abilities & b'000000101' = b'000000101' 

爲了測試任何位是否接通,使用:

WHERE abilities & b'000000101' != 0 

要打開所有的位在面具:

SET abilities = abilities | b'000000101' 

要關閉他們全部:

SET abilities = abilities & ~b'000000101' 

這些位函數的文檔here

+0

你好,如果我想知道一個球員是否可以使用某種技能,這樣可以,但是如果我想列出所有可以使用某種技能的球員,我該怎麼做?我希望MySql檢查所有具有第二和第三位ON的玩家。謝謝。 – Raulnd

+0

SELECT * FROM'Players' WHERE'Abilities'&b'0000000001'這會拉動所有結束於1,但如果我做&b'0000000111'也將拉1與第一,第二和第三位的一切(我不dont想要) – Raulnd

+0

選擇*從玩家哪裏能力&b'0000000001'= b'0000000001'將選擇最後一位的那些無論其他位是 – Raulnd

0

在MySQL中,你可以通過

SELECT (b'0000000101' & b'1010010101') 

比較位例如。

所以測試一個球員都知道冰,你可以做一個按位與b'0000000010

當然,如果技能的數目超過可用的位數,你將需要改變的東西。

要麼硬着頭皮添加額外的字段,或者在表格中,通過使用一個更大的數據類型較大二進制字段。

,第二個選項可能需要一些工作將舊數據類型到新的。

+0

嗨!我可以做這樣的事嗎?SELECT * FROM table WHERE player meets ability。通過這個我想回聲(在PHP中)每個可以使用fire的玩家(第一位)。目前,如果我使用我的MySQL查詢,我只會帶來可以使用火焰的玩家,但如果玩家知道冰,它就不會。我想我只是比較整數。 我目前的查詢:SELECT * FROM players where ability = 0000000001 – Raulnd