• Какую бд лучше выбрать?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега SQL
    Седой и строгий
    Mongo почти никогда не проще использовать. Для её выбора должны быть очень веские основания.
    Ответ написан
    Комментировать
  • Какой подход к хранению данных выбрать?

    vhood
    @vhood
    Не забывайте отмечать решения
    Денормализация реляционной базы данных нужна только для оптимизации(и то могут быть другие варианты) или хранения динамического набора полей.
    Оптимизация нужна только тогда, когда есть просадка производительности.

    Если нет очевидной нужны делать первый вариант, нужно делать второй.
    Ответ написан
    Комментировать
  • Как гарантировать последовательную запись данных без пропусков id?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Как реализовать надежную запись списка данных без пропусков значения автоинкремента id?


    Никак НЕ РЕАЛИЗОВЫВАТЬ.

    Оставь автоинкремент в покое - он обязан обеспечивать только уникальность, и не более. Нужна непрерывная нумерация? Создай для неё ОТДЕЛЬНОЕ поле, и нумеруй программно. Триггеры в помощь.
    Ответ написан
    4 комментария
  • Теоретические знания в собеседованиях важны?

    Snakecharmer
    @Snakecharmer
    Широкопрофильный менеджер и аналитик
    Глубокие теоретические/философские вопросы всегда были уделом интеллектуальной элиты, а не плебеев))) Кем вы хотите быть: элитным айтишником или нет?

    ИТ-сфера по своей природе практична. Может сложиться ложное впечатление что теория не важна. В реальности же, глубокое понимание теории обязательное требование на любые middle+, senior, lead вакансии. Потому что эти специалисты решают проблемы, а не просто тасочки в джире. Сложно занять высокую должность не стремясь проникнуть в смысл вещей. Не стремясь понять какие процесы происходят в кишках у фреймворка/библиотеки/языка/субд... да без разницы чего ещё.

    Важно не то что делает ваша функция. Важно как делает. И почему именно так делает. И почему до сих пор именно так. Знание теории отлично помогает понять границы применимости ваших технологий. Посмотрите вот этот 8-минутный отрывок, где фронтендер объясняет что надо спрашивать у джунов, мидлов и сеньоров.

    Разобраться быстро не получится. Именно поэтому чтобы стать настоящим сеньором люди с десяток лет впахивают. Читают тонны литературы и документации. И не прыгают часто с одного места работы на другое - чтобы видеть результат своих действий во времени, и понимать правильное решение они приняли когда что-то программировали или нет.

    Поэтому не надо для собеседований ничего заучивать. Собеседование - всегда стресс, вы всё забудете. Наберитесь терпения, и учитесь. Со временем к вам всё придёт.
    Ответ написан
    8 комментариев
  • Как после удаления последней записи сделать чтоб id следующей новой записи стал как у удаленной записи чтоб не разрывать нумерацию?

    @RusaDrako
    Имеет ли смысл решать эту задачу в таком виде?

    Вы всё равно будете иметь разрывы в записях: создана запись id=n (счётчик следующей записи n+1), после неё будет создана другая запись id=n+1 (счётчик следующей записи n+2), а после будет удалена запись n, счётчик сброшен до n+2.
    Ответ написан
    5 комментариев
  • Nginx возвращает 404 при запросе на существующий маршрут. Что делать?

    smilingcheater
    @smilingcheater
    location /{                                                                                                             
        try_files $uri $uri/ =404;

    Вы говорите NGINX'у - попробуй сначала запрошенный урл, потом его же со слешем, потом выдай 404. NGINX делает точно то, что вы сказали.
    Если у вас собранное реакт-приложение, то скорее всего у него точка входа index.html
    Замените указанное правило на
    location /{                                                                                                             
        try_files $uri $uri/ /index.html;

    тогда по запрошенному (но не существующему реально на файловой системе) урлу /poll вам вернутся содержимое Index.html, и запустится реакт, и реакт-роутер обработает указанный урл.

    https://nginx.org/en/docs/http/ngx_http_core_modul...
    Ответ написан
    1 комментарий
  • Почему так работают интерфесы в Го?

    Потому что в Го сигнатура метода в интерфейсе должна совпадать полностью. Таким образом на рантайме они быстро матчатся.

    Иначе пришлось бы заглядывать внутрь типа A, а так как это все происходит на рантайме, было бы неоптимально. Возможно для вашей цели больше подойдут дженерики, в их случае происходит мономорфизация и компилятор генерирует отдельный код для каждого варианта дженерика, что работает быстро.

    Кстати, не рекомендую называть интерфейсы ISomething, это не принято в Го.
    Ответ написан
    Комментировать
  • Как сделать верную группировку в Union?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT id, MIN(type) type
    FROM t1
    WHERE type IN (1, 2)
    GROUP BY id
    Ответ написан
    4 комментария
  • Как можно получить изменения во VIEW, когда изменяется базовая таблица?

    Melkij
    @Melkij
    PostgreSQL DBA
    view не хранит никаких данных. Это просто сохранённое дерево запроса, встраиваемое в обратившийся к этой view запрос.
    Вам нужен триггер на таблице с данными, который будет писать в отдельную аудит таблицу историю изменений. Потом из этой таблицы получайте историю.
    Ответ написан
    Комментировать
  • Как правильно определить mime_type файла в папке после распаковки zip?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    mime_content_type определяет тип файла по сигнатуре, описанной в файле magic.mime.
    Если файл начинается с символов PK, то он будет определён как application/zip.
    P.S. Если точнее, то сигнатура "PK\x03\x04".
    Ответ написан
    6 комментариев
  • Насколько эффективна REST-full архитектура?

    vabka
    @vabka
    Токсичный шарпист
    Во-первых не rest-full, а restful с одной l.
    При использовании REST-full запросов, на сколько я понимаю, вся информация хранится в БД и привязывается к модели @Entity

    Нет. REST-это исключительно про интерфейс, а что там под капотом - не важно.
    То есть даже видео и файлы изображений, которые загружаются на сервер, в случае с REST-full хранятся в базе данных, а не где-то в папке или на диске...

    НЕТ.
    Ответ написан
    Комментировать
  • Как на сайте показывать псевдо-3д?

    @its2easyy
    часто просили клиенты, поэтому оформил это в библиотеку.
    https://github.com/its2easy/animate-images

    Хотя если не нужна интерактивность то проще зацикленное видео использовать
    Ответ написан
    Комментировать
  • Как экранировать sql запрос внутри texarea?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Это очень просто сделать.
    Надо всего лишь освоить подготовленные выражения.
    Например, почитав вот тут https://habr.com/ru/articles/662523/

    И все запросы, в которых участвуют переменные, выполнять только таким образом.
    А texarea там, или tinymce - это уже без разницы.
    Ответ написан
    1 комментарий
  • Почему при удалении куки возникает ошибка Warning: Cannot modify header information?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Ответ написан
    Комментировать
  • Является ли хорошей практикой использовать связку Nginx+Apache сегодня?

    ky0
    @ky0 Куратор тега Nginx
    Миллиардер, филантроп, патологический лгун
    Если точно понимаете, зачем вам Апач - почему бы и нет?

    Но, честно говоря, вариантов тут немного - чаще всего такое взгромождают, когда приложение работает только с неким экзотическим модулем апача, аналога которого для других веб-серверов не существует (см. напр. 1С). Ну или когда несколько поколений веб-программистов в три слоя обмазало сайт htaccess-магией и конвертировать это в nginx-директивы никто не хочет.
    Ответ написан
    2 комментария
  • Запрос на уникальность в разные года. Как составить?

    rozhnev
    @rozhnev Куратор тега SQL
    Fullstack programmer, DBA, медленно, дорого
    NOT EXISTS эффективней чем NOT IN
    select distinct t.id_user from T as t
    where 
        t.year = 2023 and 
        not exists (select id_user from T tt where year = 2022 and tt.id_user = t.id_user);


    другие варианты решения задачи:
    -- LEFT JOIN
    select distinct t.id_user 
    from T as t
    left join T tt on tt.year = 2022 and tt.id_user = t.id_user
    where t.year = 2023 and tt.id_user is null;
    
    -- EXCEPT
    select distinct t.id_user from T as t
    where t.year = 2023
    except
    select distinct t.id_user from T as t
    where t.year = 2022
    ;
    Ответ написан
    Комментировать
  • Какую базу данных использовать для такого проекта?

    rozhnev
    @rozhnev
    Fullstack programmer, DBA, медленно, дорого
    Выбирать базу данных по картинке - задача неблагодарная. В вашем случае я не вижу каких-то особых требований к базе, поэтому возьмите ту базу которую вы уже знаете. Если не знаете ни одной - возьмите MySQL (самая популярная база для WEB проектов)
    Ответ написан
    Комментировать
  • Не могу авторизоваться, почему?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    так, давайте по порядку:
    login = filter_var(trim($_POST['login']), FILTER_SANITIZE_STRING);
    $pass = filter_var(trim($_POST['pass']), FILTER_SANITIZE_STRING);
    Во первых - зачем? Вы здесь не вносите никаких данных в систему, вы просто проверяете данные от пользователя с данными в бд.
    Во вторых - если у вас есть правила для логина и пароля - надо их и применять, а не втыкать абсолютно бесполезные фильтры.

    $pass = md5($pass."ghjsfkld2345");используйте встроенные функции, password_hash и password_verify для работы с паролями.

    $result = $mysql->query("SELECT * FROM `users` WHERE `login` = '$login' AND `pass` = '$pass '");
    Читаем про подготовленные выражения. Без них рано или поздно словите инъекцию. И начинать надо сейчас, на этапе обучения, и привыкнуть что по другому с переменными в запросах не работают. Так же, по уму подключение желательно вынести отдельно и добавить настройки. Рекомендую использовать PDO драйвер подключения к бд, он работает чуть быстрее и по функционалу побогаче.

    Warning: count(): Parameter must be an array or an object that implements Countable in D:\OSPanel\domains\Site1\auth.php on line 14
    по тому что читаем доку -
    fetch_assoc — Fetch the next row of a result set as an associative array
    Соответственно, если запрос пустой, то фетчить нечего. Для проверки существует num_rows.

    Выводит: "Такой пользователь не найден." Но в БД такой пользователь есть зарегестрированный, все данные авторизации правильные, а он выводит, что нету такого пользователя.
    Программу не на*бешь. Если говорит что нету, значит нету. А если не находит то что есть, значит вы не правильно ищете, что легко проверить. Вангую что запрос будет совершенно не таким как вы ожидаете:
    ...
    $query = "SELECT * FROM `users` WHERE `login` = '$login' AND `pass` = '$pass'";
    var_dump('check: ',$login, $pass,$query); 
    $result = $mysql->query($query);
    ...


    UPD: абсолютно верно подмечено Adamos - `pass` = '$pass ' никогда ничего не найдет из-за пробела в условии.
    Ответ написан
    Комментировать
  • Как проксировать запросы только если хост доступен?

    chupasaurus
    @chupasaurus
    Сею рефлекторное, злое, временное
    Именнованный location в помощь
    location / {
      root /var/www/html;
      try_files @upstream $uri =404;
    }
    location @upstream {
      proxy_pass http://127.0.0.1:3000;
      proxy_intercept_errors on;
      recursive_error_pages on;
      error_page 404 = @local;
    }
    location @local {
      try_files $uri =404
    }
    Ответ написан
    5 комментариев