За последние 24 часа нас посетили 20300 программистов и 1082 робота. Сейчас ищут 754 программиста ...

Хранение настроек в одном поле базы данных

Тема в разделе "Решения, алгоритмы", создана пользователем DZEN, 16 окт 2013.

  1. DZEN

    DZEN Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    250
    Симпатии:
    0
    Каждая запись имеет поле содержащее информацию в какой день недели должно повторяться событие.

    Код (Text):
    1. |пн|вт|ср|чт|пт|сб|вс|
    2. | 1| 1| 1| 1| 1| 1| 0|
    3.  
    4. |пн|вт|ср|чт|пт|сб|вс|
    5. | 0| 0| 0| 1| 1| 0| 0|
    К примеру необходимо выбрать все события которые повторяются в четверг и пятницу. Хранить строку "0001100" и пользоваться SUBSTR не предлагать.
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    взаимоисключающие параметры соблюдены. дзен достигнут.
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    ммм... эээ... уфф...
    ну видимо автор плавно подводит нас к правильному решению. а давайте послушаем его!
     
  4. DZEN

    DZEN Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    250
    Симпатии:
    0
    Форум уныл чуть более, чем полностью, кажется я припоминаю почему меня уже два раза здесь банили. igordata, а ведь в былые годы ты мне не раз помогал…

    Код (Text):
    1. --------------------------------------------------
    2. // Python
    3.  
    4. def decimal2binary(dec):
    5.     return bin(dec)[2:]
    6.  
    7. def binary2decimal(str):
    8.     return int(str, 2)
    9.  
    10. --------------------------------------------------
    11. // PHP
    12.  
    13. function decimal2binary($dec) {
    14.     return decbin($dec);
    15. }
    16.  
    17. function binary2decimal($str) {
    18.     return bindec($str);
    19. }
    20.  
    21. --------------------------------------------------
    22. // JavaScript
    23.  
    24. function decimal2binary(dec) {
    25.     return (dec >>> 0).toString(2)
    26. }
    27.  
    28. function binary2decimal(str) {
    29.     return parseInt(str, 2)
    30. }
    31.  
    32. --------------------------------------------------
    33. // Язык не имеет значения
    34.  
    35. binary2decimal('1111100') // 124 - будние
    36. binary2decimal('1111110') // 126 - длинные будние
    37. binary2decimal('0000011') // 3   - выходные
    38. binary2decimal('0000010') // 2   - суббота (маска для выборки)
    39.  
    40. --------------------------------------------------
    41. // SQL
    42.  
    43. CREATE TABLE `reminder` (
    44.   `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
    45.   `message` text,
    46.   `reminder` tinyint(1) unsigned zerofill NOT NULL DEFAULT '0',
    47.   PRIMARY KEY (`id`)
    48. );
    49.  
    50. INSERT INTO `reminder` VALUES (1, 'workdays', 124);
    51. INSERT INTO `reminder` VALUES (2, 'long workdays', 126);
    52. INSERT INTO `reminder` VALUES (3, 'weekends', 3);
    53.  
    54. SELECT `message` AS `ON_SUNDAYS` FROM `reminder` WHERE `reminder` & 2;
    55. --------------------------------------------------
     
  5. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    а почему нельзя хранить чтобы каждый день это отдельная колонка ?
    предлогаю explode
    правда придется потом массив парсить и удалять пн вт ср ..

    и будет дзен.
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    прекрасно! вот теперь есть чего обсудить.
    а чем эта схема лучше семи полей типа char(1) или tinyint ?
    насколько я понимаю, смысл задачи не в сбережении байтов, а в удобстве использования. чтобы одним селектом получить все записи "за четверг", я могу сделать
    для набора полей
    ... WHERE d4
    или для битовой маски
    ... WHERE bitmask & 8
    что из них будет быстрее? а нагляднее?

    Добавлено спустя 2 минуты 40 секунд:
    реально я не считаю ни одну из этих схем достойной. потому что условия вроде "каждое первое и пятнадцатое числа месяца" или "первая пятница месяца" здесь непредставимы. а были бы очень кстати!
     
  7. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    вроде в задаче есть только неделя..
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    ага. угадай почему?
     
  9. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    включил мозг на 200% и он выдумал страшную картину

    это рабочий график составляется именно на неделю
    скажем
    1 строка - хождение в туалет ( ежедневно)
    2 строка - покупка жратвы
    3 строка - покупка пива
    ...
    лучше мозг так не напрягать- все равно не угадаю
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    я не баню никого.
     
  11. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    потому что автор не ищет совета. скорее всего он до весны здесь н появится.
     
  12. Golodnyi

    Golodnyi Новичок

    С нами с:
    11 окт 2013
    Сообщения:
    63
    Симпатии:
    0
    Адрес:
    Кемерово
    Код (Text):
    1.  
    2. <p>Выбирай:</p>
    3. <select>
    4.     <option>json_encode</option>
    5.     <option>serialize</option>
    6. </select>
     
  13. DZEN

    DZEN Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    250
    Симпатии:
    0
    Да, перепутал форумы, на этом пока не банили. Задача была проста: есть PostgreSQL, MariaDB, SQLite базы данных. Языки backend Python, PHP и JavaScript на frontend. Базы данных должны синхронизироваться. Boolean вообще существует только в PostgreSQL, уже излишки на несколько колонок. Никакого PHP serialize, JSON в текстовых полях, или просто строки "1111100" - это обсуждать даже не хочется ни в каком виде. Органичение на размер 5Mb. Строки жмем LZW. Когда заканчивается место - предлагает удалить самые старые записи. Битва за байты разумеется. Когда будут меняться условия задачи и подход поменяется, а тогда задача была именно в этом. С базами не работал невообразимое количество времени, поэтому и спрашивал, quick answer так сказать. Если есть предложения лучше, всегда буду рад посмотреть на него, мне более чем надо.
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    проблемы высосаны из пальца. у тебя какой-то единственный случай, когда всё сошлось и твое решение работает - и очень хорошо. загоны насчет пяти мегабайт в 2013 году - это конечно твое личное дело.
     
  15. DZEN

    DZEN Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    250
    Симпатии:
    0
    Даже стражник у ворот имеет собственное мнение. Но кому интересно мнение стражника у ворот? Так можно сказать про что угодно, а то и вообще о форумчанине нехорошо отзываться, только потому, что он куда-то глубже копнул в алгоритмах да еще и гад такой условия поставил. Если никто здесь этого никогда не делал, это не значит, что другие не встречаются с таким через проект-два. http://en.wikipedia.org/wiki/Web_storage - те самые злощастные ~5Mb. Как сами столкнетесь, так первым делом в эту ветку и зайдете смотреть :-D.
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    я с таким не столкнусь, спасибо. я исповедую другие принципы.
    я ем мясо и умею пользоваться калькулятором. на 2тб хард войдут данные по 5 мб где-то около 400 тысяч клиентов/посетителей. зачем страдать?
     
  17. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    автор, ты игнорируешь вот это?
     
  18. Yadfewm

    Yadfewm Активный пользователь

    С нами с:
    20 июл 2009
    Сообщения:
    223
    Симпатии:
    0
    Я не понимаю, почему вы молчите и не говорите человеку влоб:
    "DZEN эта тема очень похожа на самопиарство"
    задал вопрос и опа: я крутой я помню из школьного курса как работать с ноликами и единичками. И поэтому моя жопа умещается в 5 мегабайт.
    Трындец.

    Я это к чему, а кто му что:
    Код (Text):
    1. Форум уныл чуть более, чем полностью
    Обидно просто, хороший форум, а приходят, умничают и обсирают. НЕВЕЖЛИВО!!!
     
  19. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    LOL
    наверное потому, что с "просветленным" спорит только дурак. мы не исправим его, а он не исправит форум. всё честно!
     
  20. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    Об этом было сказано в третьем сообщении.

    Вопрос остается открытым. Почему б не семь полей?