Hostem Опубликовано 20 Апреля 2005 Жалоба Поделиться Опубликовано 20 Апреля 2005 Ставлю значит одному полю тип tinyint(1), по идее это эквивалент логическому типу данных, НО получалось в это поле вставить циферку и 2, и 3, ... и 255 (большие числа уже сводит к 255). Так вот надо мне штук 8 значений Да/Нет (например в таблицу ибф_мемберс, чтобы отметить какую инфу пказывать о пользвателе в левой колонке при просмотре тем). Так лучше использовать 8 полей tinyint(1) или одно, но преобразовывать ее в двоичную систему исчисления. Например, 255=11111111, 0=00000000, 2=00000010 и тд А потом вытаскивать эти нолики и одинички в соответствующие флажки отображать/не отбражать. Тут конечно пострадает выборка пользователей, которые включили отдельную штучку... Но такая выборка впринципе почти нужна будет... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Vic'er Опубликовано 20 Апреля 2005 Жалоба Поделиться Опубликовано 20 Апреля 2005 Ставлю значит одному полю тип tinyint(1), по идее это эквивалент логическому типу данных Скорее эквивалент логических данных этоenum('yes', 'no')илиenum('true', 'false')илиenum('1', '0') Так лучше использовать 8 полей tinyint(1) или одно, но преобразовывать ее в двоичную систему исчисления. Для запросов лучше 8 отдельных, чем одно комбинированое запаришься потом через время в своем же коде разбираться Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Hostem Опубликовано 20 Апреля 2005 Автор Жалоба Поделиться Опубликовано 20 Апреля 2005 А... у меня в книге просто написано, что "tinyint(1)" имеет синонимы "INT1", "BIT" и "BOOL". И в IPB используют для таких полей tinyint (1) Да там впринципе и Enum, и tinyint по одному байту... Так вот думаю - тут же будет 1 байт на строку, а так 8 байт... А если мне таких флажков еще в пару раз больше? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 20 Апреля 2005 Жалоба Поделиться Опубликовано 20 Апреля 2005 CHAR(8) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Alina Опубликовано 20 Апреля 2005 Жалоба Поделиться Опубликовано 20 Апреля 2005 Имхо, что enum('0','1'), что tinyint(1) - в данном случае без разницы с точки зрения хранения данных. Если полей таких немного (вернее, не очень много) - я бы делала отдельные поля. Быстрее будет выборка идти, код писать проще. Если их уже очень много, вот тогда, возможно, заморачиваться с объединенным полем... Хотя, опять же, я, наверное, скорее сделала бы отдельную таблицу, типа member_extra. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Hostem Опубликовано 24 Апреля 2005 Автор Жалоба Поделиться Опубликовано 24 Апреля 2005 Насчитал 16 (+/-2) полей! Дык, CHAR(8), 8 tinyint'ов - это все по 8 байт будет! В данном случае уже 16 байт на строку. Можно использовать smallint (2 байта) А для быстрой проверки отмечен ли где флажок можно использовать побитые операции, более того битовые опреации можно делать в запросе к SQL (чтобы определить сразу кто какой флажок включил) SELECT * FROM `test` WHERE number [b]&[/b] 1 = 1 Надо только запомнить что на какой позиции. Применять побитовую операцию & к этому полю вместе с нужной степенью 2. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Alina Опубликовано 24 Апреля 2005 Жалоба Поделиться Опубликовано 24 Апреля 2005 Интересно только, какова будет скорость выполнения запроса. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Hostem Опубликовано 24 Апреля 2005 Автор Жалоба Поделиться Опубликовано 24 Апреля 2005 Так это только пару раз в жизни такой запрос проделать прийдется. Не часто мне захочется узнавать сколько человек включили какую-то конкретную настройку. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Alina Опубликовано 24 Апреля 2005 Жалоба Поделиться Опубликовано 24 Апреля 2005 Хм, а установка этой настройки на что-то будет влиять? Движок тоже ведь должен запрашивать, включена ли настройка или нет... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Hostem Опубликовано 24 Апреля 2005 Автор Жалоба Поделиться Опубликовано 24 Апреля 2005 Ну, если есть у нас это число и чтобы проверить установлено ли на флажок "да" - надо применить $переменная*степень_2!=0, т.к. степени 2 имеют только одну 1, то если на нужной позиции не будет 1 - результат операции будет 0. Циклом можно пройтись по всем флажкам и создать масив 0 и 1. Да вообще можно сразу в if который проверяет эту настройку добавить. А чтобы преобразовывать в настройках надо эти флажки (наборы 0 и 1) преобразовывать в сумму степеней 2 (умноженное на 0 или 1). В общем простым циклом . Если мы захотим всем пользователям поставить например третий флажок значением 0, то применяем UPDATE test SET number=number&11111011 только 11111011 надо перевести в 10-ную систему исчисления . Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Alina Опубликовано 25 Апреля 2005 Жалоба Поделиться Опубликовано 25 Апреля 2005 Так вот мне и интересно, насколько быстро это будет исполняться. И стОит ли огород городить Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 25 Апреля 2005 Жалоба Поделиться Опубликовано 25 Апреля 2005 Напрямую зависит от того насколько большая таблица. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Hostem Опубликовано 25 Апреля 2005 Автор Жалоба Поделиться Опубликовано 25 Апреля 2005 Да, и битовые операции выполняются в один такт (как прибавление). ИМХО, это все равно что сделать запрос увеличения всем пользователям количество постов на 1. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
d1pro Опубликовано 25 Апреля 2005 Жалоба Поделиться Опубликовано 25 Апреля 2005 А еще сдвиговые+битовые операции гораздо быстрее чем умножение стандартной инструкцией mul, раз в 7... На 8086 Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Hostem Опубликовано 5 Мая 2005 Автор Жалоба Поделиться Опубликовано 5 Мая 2005 Ага! А компилятор PHP переделывает автоматически $a*=2; в $a<<=1;? P.S.: можете посмотреть что получилось http://www.harrypotter.com.ua/settings_new.htm P.P.S.: там один столбик INT для настроек отображения сообщений тем и ПМок ("отображать ли картинки" и инфа в левой колонке). Для остальных фичей - tinyint'ы. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.