Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (1)

Наибольший вклад в теги

Все теги (17)

Лучшие ответы пользователя

Все ответы (24)
  • Нормально ли хранить json в MySql?

    finnish
    @finnish
    Теория
    Реляционные базы подразумевают, что все часто используемые поля должны храниться в отдельных столбцах. В какой-то момент Вам понадобится искать/сортировать по городу, а его хранение внутри JSON сделает эту операцию крайне сложной.
    Все преимущества JSON-а сводятся к тому, что в одной записи можно "легко" добавить или удалить какое-то поле, не прибегая к модификации таблицы. Лёгкость написана в кавычках потому, что модификация одного поля выполняется сложнее, чем первоначальная запись всего объекта: взять JSON; преобразовать в объект; модифицировать значение нужного поля; преобразовать в строку; записать её в базу данных. И делать это нужно будет средствами приложения, MySQL на это просто не способен.

    Практика
    Использование JSON является нормальной практикой. Если возникает необходимость выполнять поиск по какому-то полю, оно выносится в отдельную колонку. Работы по переносу рутинные, но требуют внимательности от программиста, т.к. путь до значения изменился. Например, раньше было user.data.city и стало user.city.

    Сейчас набирает популярность PostgreSQL, где работа с JSON выведена на уровень SQL-синтаксиса. Там Вы сможете легко добавлять/модифицировать/удалять отдельные JSON-поля, не прибегая к помощи приложения. Даже индексы поддерживаются!..
    Ответ написан
    3 комментария
  • Как узнать какая из двух кнопок была нажата?

    finnish
    @finnish
    $('#one,#two').click(function () {
        if (this.id == 'one') {
            ....
        } else {
            ....
        }
    }
    Ответ написан
    Комментировать
  • Регулярка. Как определить наличие определенного фрагмента внутри []?

    finnish
    @finnish
    ^([\W\d\_]|\&amp\;)+$
    Эта регулярка не решает поставленную задачу с "фрагментом внутри []", но упомянутые строки должна обрабатывать нормально.
    Ответ написан
    4 комментария
  • Jquery. После клонирования элемента на него не срабатывает событие. Почему?

    finnish
    @finnish
    Роман прав, делегирование событий - наиболее правильный способ.
    Если же у Вас есть какие-то ограничения на использование этого метода, посмотрите на аргументы $.fn.clone() - вы можете клонировать элемент вместе со всеми слушателями.
    Ответ написан
    Комментировать
  • Как работают представления в MySQL?

    finnish
    @finnish
    Представление, это как подготовленный заранее шаблон запроса. Выполняя поиск по какому-то представлению, Вы на самом деле лишь дописываете к этому шаблону свои условия.

    Вот простой пример представления (назовём его `users_online`), которое показывает пользователей, проявлявших активность в течении последних 15 минут:
    SELECT * 
    FROM `users`    AS `u` 
    JOIN `activity` AS `a` 
    ON   `a`.`user_id`   = `u`.`id` 
    AND  `a`.`modified` >= CURRENT_TIMESTAMP - INTERVAL 15 MINUTE;

    При выборе онлайн-пользователей старше 18 лет, Ваш запрос будет скорее всего примерно такой:
    SELECT * FROM `users_online` WHERE `age` > 18;

    Что для базы данных равноценно:
    SELECT * FROM (
        SELECT * 
        FROM `users`    AS `u` 
        JOIN `activity` AS `a` 
        ON   `a`.`user_id`   = `u`.`id` 
        AND  `a`.`modified` >= CURRENT_TIMESTAMP - INTERVAL 15 MINUTE
    ) AS `users_online` 
    WHERE `age` > 18;

    В каждом конкретном случае база данных может оптимизировать запрос, и результирующим может оказаться нечто иное, но смысл от этого не меняется и описан в первом предложении моего комментария. Например, более простое представление:
    SELECT * FROM `users` WHERE `online` = 1;
    ... с Вашими условиями превратится в:
    SELECT * FROM `users` WHERE `online` = 1 AND `age` > 18;
    Ответ написан
    5 комментариев