Непонятный запрос с WHERE параметром

magiq

Новичок
Непонятный запрос с WHERE параметром

Добрый день меня интересует следующий запрос
PHP:
SELECT * FROM ProfilesDesc WHERE `visible` & 8 AND ( FIND_IN_SET('0',show_on_page) OR FIND_IN_SET('25',show_on_page)) AND profile_type != 'couple' ORDER BY `order` ASC
что значит
PHP:
WHERE `visible` & 8
Непонятен знак '&'
Заранее спасибо
 

magiq

Новичок
Где можно ознакомится с основами битовых операторов, если я вообще не имел дело с ними? Т.е основу
 

magiq

Новичок
Всеравно не пойму, у меня `visible` состоит из значений 'user','memb','adm'. Не могу понять
 

magiq

Новичок
Автор оригинала: Вурдалак
http://dev.mysql.com/doc/refman/5.0/en/enum.html

P.S. Правда запрос ничего не вернёт в данном случае.
запрос работает

Поле visible содержит:

Длины/Значения*
'user','memb','adm','moder'

Т.е 4 варианта заполнения этого поля. Так что же оно возвращает? например когда WHERE `visible` & 8 - возвращает значения с visible = 'moder'
WHERE `visible` & 4 - возвращает с значением visible = 'adm'
Помогите разобраться, запрос работает!
 

magiq

Новичок

kotpl_

Новичок
8 в двоичном представлении это 1000. Таким образом если значение поля visible 8(10)=1000(2) то 1000 & 1000 даст 1 (то есть true). Или же мы проверили что 4 бит установлен в 1. Если бы там был 0 результат операции был бы 0. В данном случае разработчик скорее всего закодировал несколько состояний, например
1000 - бананы
0100 - апельсины
0010 - мандарины
0001 - ананасы.
Теперь он может проверить какое же состояние на самом деле. Для этого он делает побитовый and. Для бананов с 8 (1000) для апельсинов с 4 (100) и т.д.
 
Сверху