• Какой тип хранения данных выбрать для числа с дробной частью в MySQL?

    @bacon
    Если нужна точность - DECIMAL, если нет - FLOAT или DOUBLE
    Ответ написан
    Комментировать
  • Какой тип хранения данных выбрать для числа с дробной частью в MySQL?

    vabka
    @vabka
    Токсичный шарпист
    decimal, float, или double в зависимости от желаемой точности.
    Ответ написан
    Комментировать
  • Какой запрос для выборки данных с двух таблиц в этом примере?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT categories.id, 
           categories.slug,  
           ct_ru.title title_ru,  
           ct_en.title title_en,  
           ct_de.title title_de
    FROM categories
    LEFT JOIN category_translations ct_ru ON category_translations.category_id=categories.id 
                                         AND category_translations.locale = 'ru'
    LEFT JOIN category_translations ct_en ON category_translations.category_id=categories.id 
                                         AND category_translations.locale = 'en'
    LEFT JOIN category_translations ct_de ON category_translations.category_id=categories.id 
                                         AND category_translations.locale = 'de';
    Ответ написан
    Комментировать
  • Как исправить ошибку Implicit conversion from float (int) to int loses precision?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Делать не неявное (implicit), а явное (explicit) преобразование.
    $days = floor(abs(strtotime(date("Y-m-d", $sd)) - strtotime(date("Y-m-d", $snow))) / 3600 / 24);
    или
    $days = (int)(abs(strtotime(date("Y-m-d", $sd)) - strtotime(date("Y-m-d", $snow))) / 3600 / 24);
    Ответ написан
    Комментировать
  • Как исправить ошибку Implicit conversion from float (int) to int loses precision?

    Fockker
    @Fockker Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Этот код какой-то эстет писал.
    Для получения количества полных дней вместо битовых выкрутасов надо просто использовать floor()
    Хотя в данном случае надо использовать ceil, ну или round. Потому что эти 5 сотых дня происходят явно от прехода на летнее время. И с конверсией в int теряется 1 день.
    Ответ написан
    Комментировать
  • Как держать в таблице только последние 10 записей?

    @Akina
    Сетевой и системный админ, SQL-программист.
    1. Создать сразу 10 записей с достаточно древней датой.
    2. Вместо вставки записи обновлять самую старую:
    UPDATE table
    SET {columns} = {values}
    ORDER BY created_at ASC LIMIT 1;

    Само собой created_at - ON UPDATE CURRENT_TIMESTAMP. Ну или обновлять вручную, если больше заняться нечем.

    Такая технология к тому же позволяет "на лету" изменять лимит записей. Надо больше? вставляем необходимое число записей с датой в далёком прошлом. Надо меньше? удаляем необходимое число самых старых записей.
    Ответ написан
    Комментировать
  • Как держать в таблице только последние 10 записей?

    iMedved2009
    @iMedved2009
    Не люблю людей
    1. По крону сносить не нужные записи, а в запросе пока не снеслись юзать лимит /n;
    2. Через триггер который при каждом добавлении записи будет сносить не нужные;
    3. Делать не insert а update где в качестве id записи выбирать подзапросом самую старую запись.

    update event, (select id from event order by date limit 1) as s set value = 'changed', date = now() where t.id = s.id;

    но предварительно придется нагнать туда 10 записей.

    4. Сделать тоже самое через insert on conflict update. Тогда не придется нагонять

    Но как то задача странная. На каждое внесение записи - делать еще процедуру удаления. Дополнительная нагрузка для чего?
    Ответ написан
    6 комментариев
  • Как получить все записи которые гарантируют 6 совпадений из 7?

    @402d
    начинал с бейсика на УКНЦ в 1988
    Хмм. А зачем так издеваться над муской ?
    В таблице у Вас 3 в 7 степени записей 2178.
    А что такое 6 из 7. Не совпала одна цифра.
    Таких ситуаций 7 . Не совпала 1,2, и т.д.
    на ее месте значит два других из 3х значений.
    Получаем всего будет 14.

    Пишется в два вложенных цикла на любом ЯВУ.
    Или муська здесь принципиально и в один запрос ?

    Тогда юнион 7 запросов где в where пишите условия
    первая цифра не равна, остальные равны.
    и по очереди неравенство сдвигаете до последней цифры.

    15 результат совпали 7 из 7
    Ответ написан
    Комментировать
  • Как получить все записи которые гарантируют 6 совпадений из 7?

    rozhnev
    @rozhnev Куратор тега MySQL
    Fullstack programmer, DBA, медленно, дорого
    Если Вы используете MySQL то запрос может быть таким:
    SELECT id, (c1=1) + (c2=0) + (c3=1) + (c4=1) + (c5=1) + (c6=1) + (c7=1) FROM test 
    WHERE ((c1=1) + (c2=0) + (c3=1) + (c4=1) + (c5=1) + (c6=1) + (c7=1)) >= 6
    ;

    run sql online
    Ответ написан
    1 комментарий
  • Как выбрать записи с базы где в полях значение 0 не больше n-ого числа?

    iMedved2009
    @iMedved2009
    Не люблю людей
    postgresql
    SELECT 
    	id
    FROM t, jsonb_each_text(to_jsonb(t)) as x("key",val)
    group by id
    having 
    count(*) filter(where val::int = 0) <=3 and 
    count(*) filter(where val::int = 1) <=4;


    https://sqlize.online/sql/psql14/06a28c679e03263b8...
    Ответ написан
    Комментировать
  • Как лучше хранить изображения пользователей на сервере?

    @bacon
    у файловых систем бывают проблемы когда в одной папки много файлов, лучше создать дополнительные папки, например,
    6b86b273ff34fce19d6b804eff5a3f5747ada4ea.jpeg -> 6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4ea.jpeg
    Ответ написан
    Комментировать
  • Как добавить массив данных в базу данных (pdo) каждый элемент отдельно, одним запросом?

    @TheAndrey7
    Можно. После слова VALUES перечисляете наборы значений через запятую.
    $database = Database::openConnection();
    $database->prepare("INSERT IGNORE INTO words (word) VALUES (?), (?), (?)");
    $database->execute([$word1, $word2, $word3]);
    Ответ написан
    Комментировать
  • Разница между if else и try catch?

    @Akela_wolf
    Extreme Programmer
    Есть такой принцип: "если убрать все обработчики исключений, программа должна нормально функционировать при условии ввода корректных данных" (Д.Томас, Э.Хант "Программист-прагматик"). Поэтому вопрос - является ли введенный пользователем нуль корректными данными? Если да - то его надо оборачивать в if. Если же это некорректные с точки зрения программы данные - то можно кидать исключение.

    То есть исключение должно выбрасываться при поступлении на вход программы некорректных данных. А какие именно данные считать некорректными - это определяет разработчик (или заказчик) программы.
    Ответ написан
    5 комментариев
  • Какая структура базы данных для авторизации через email/password и соц. сети?

    @TheAndrey7
    Теперь возникла задача как доработать структуру базы данных чтобы можно было регистрировать пользователей через соц сети плюс возможность в профиле "связать" все эти соц аккаунты в один.

    Явно лучше не трогать таблицу с локальными пользователями, которые регистрировались по email/password. У меня для привязок сторонних аккаунтов заведена такая таблица: user_id, provider, account_id (ID юзера в соцсети). По такой таблице не проблема найти аккаунт локального пользователя и пользователь может привязать несколько аккаунтов от разных соцсетей.

    И еще такой вопрос если например у пользователя нет в соц аккаунте email (зарегистрирован через телефон), как его зарегистрировать? В общем нужны советы может есть какие примеры?
    Не то что нет, а некоторые API его просто не дают. Тут либо требовать от пользователя указать E-mail, либо разрешать создание пользователей с пустым E-mail.
    Ответ написан
    2 комментария
  • Как перебрать объект, и оставить в нем все кроме исключений?

    Kozack
    @Kozack Куратор тега JavaScript
    Thinking about a11y
    Ответ написан
    Комментировать
  • Как открыть папку в которой нашелся фаил php шторм?

    Enguipro
    @Enguipro
    PHP developer
    5f38327251d3a344795236.png
    1. Открываете в редакторе файл, который нашли поиском.
    2. Нажимаете вот на эту кнопку, фокус переместится на открытый файл в дереве проекта.
    Ответ написан
    Комментировать