Задать вопрос
  • Почему конфиг Mysql пустой?

    borisdenis
    @borisdenis
    Ленив и вреден...
    Пустой конфиг = все параметры по умолчанию. Для того, чтоб узнать чему равен параметр по умолчанию вам в конфиге дали ссылку. Нужно что-то изменить - добавляйте нужную запись.
    Ответ написан
    Комментировать
  • Как использовать теги из строки бд laravel?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Laravel
    {!! !!}
    Раздел документации называется зе бейсикс aka основы, почему бы вам с ним не ознакомиться?
    Ответ написан
    1 комментарий
  • Как оптимально сделать выборку из БД?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Применительно к данной конкретной задаче:
    • СУБД предназначена для хранения и обработки массивов данных.
    • ЯП предназначен для обеспечения пользовательского интерфейса этого процесса и управления им.


    По-моему, выбор стороны для проведения обработки очевиден.
    Ответ написан
    Комментировать
  • Почему колонка типа date показывает фантастические данные?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Ох этот древний ужас не strict режима mysql.

    Вы зачем в поле даты пытаетесь вставить строку NOW()? Какая это дата должна быть и почему вам не нравится 1899 год?
    INSERT INTO messages(name, content, date) VALUES('${user.name}', '${user.content}',NOW())
    Ответ написан
    9 комментариев
  • Почему колонка типа date показывает фантастические данные?

    Потому-что, нужно так:
    INSERT INTO messages(name, content, date) VALUES('${user.name}', '${user.content}', NOW())

    Ну и учтите, что date и datetime - это разные типы.
    Ответ написан
  • Так КАКАЯ математика нужна для работы с базами данных???

    @rPman
    хватит школьных знаний

    Да, когда говорят про реляционную алгебру, мыслят категориями математического анализа, но знаний особых тут не нужно, достаточно просто запомнить (если честно, серьезно углубляться в такую математику нужно разработчикам серверов баз данных, когда начинаешь это дело оптимизировать, не забывая про доказуемую корректность, обывателю же это не надо)
    Ответ написан
    Комментировать
  • Как лучше обращаться к базе?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Если рассматривать аналогию с php, то там каждый запрос отправляется с новым подключением к базе.
    Это не так. Соединение открывается на все время выполнения скрипта, и закрывается автоматически по завершении работы всей цепочки вызовов. В процессе, одно соединение может выполнить стопицот запросов.

    На сколько целесообразно "пытаться" держать соединение, или все же просто по аналогии с php?
    Вот тут точного ответа не дам, однако в пхп стараются избегать персистент соединения, так как пул соединений не бесконечный, и чем быстрее закроется соединение, тем быстрее можно освободить очередь для открытия нового, таким образом с небольшой задержкой можно обслужить очередь из сильно превышающей пул очереди. А с одним соединением начинается жонглирование запросами внутри 1 соединения, что приводит к блокировке кучи пользователей пользующихся 1 соединением с бд, вместо локально тормозящего 1 юзера в случае открытия/закрытия...

    Более точно можно узнать у нодеров, мои выкладки по отношению к данной платформе больше теоретические.
    Ответ написан
    3 комментария
  • Как раз в секунду выводить данные из бд?

    Sanes
    @Sanes
    Делать запрос раз в секунду. Например через JS (polling/long polling/sse). Или делать запрос по событию. Например пришли данные, делаем новый запрос.
    Но это костыль. Слишком маленький интервал. Попробуйте осилить вебсокеты.
    Ответ написан
    2 комментария
  • Защита данных в API?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Здравствуйте, существует проблема защиты данных клиентского приложения передаваемых серверу и обратно.
    Какая конкретно проблема?

    как защитить данные?
    От кого?

    Можно ли использовать HTTPS
    Разрешаю, можно.

    и как это сделать
    На сервере ставите сертификат, в клиенте прописываете урл апи с https.

    или же нужно создавать свои модули шифрования под сессии?
    Если приложение передает критические данные (например банковские транзакции или шпиёнские документы), можно использовать сквозное шифрование с какими-нибудь убердлинными ключами, однако перехват ключей при хэндшейке при атаке митм никто не отменял. Впрочем, как и в случае с хттпс.
    Ответ написан
    Комментировать
  • Может ли MySQL глючить?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Все работает в 99% нормально, но иногда проскакивает выдача другой строки, не с таким полем, по которому ищем.
    Это просто значит 99% проблема в коде. Логируйте в файл запрос, параметры и результат выполнения, скорее всего логика работает не так как вы задумали. Как только словите ошибку - смотрите свой лог, наверняка запрос будет отличаться от ожидаемого.
    Ответ написан
    2 комментария
  • Как реализовать расписание для врача в базе данных?

    Adamos
    @Adamos
    Хранить в слотах только реальную запись, логику расписания вынести в шаблоны, доктору назначается один из шаблонов, определяющий, когда у него должны быть слоты. Исчезает необходимость заваливать таблицу слотов пустыми данными.
    Скорее всего, потребуется таблица реального расписания врач - день - шаблон. И, возможно, меташаблоны, определяющие расклад шаблонов на пару недель.
    Возможно, стоит проработать эту схему глубже, добавив в логику кабинеты приема... тут реально нужно погружаться в предметную область, "сделать просто" в данном случае однозначно означает "сделать нежизнеспособно".
    Ответ написан
    2 комментария
  • Как получить поле для максимального значения другой группированной строки GROUP BY в MySQL?

    @pantsarny
    А до 8.0 можете сделать выборку из подзапроса, где будут только max значения
    Ответ написан
    1 комментарий
  • Как получить поле для максимального значения другой группированной строки GROUP BY в MySQL?

    rozhnev
    @rozhnev Куратор тега MySQL
    Fullstack programmer, DBA, медленно, дорого
    Наачиная с MySQL 8.0.14 Вы можете использвать LATERAL:
    select * 
    from a,
    lateral (select * from b where b.a_id = a.id order by d desc limit 1) m;

    https://sqlize.online/sql/mysql80/e146f8c70b74a858...
    Ответ написан
    2 комментария
  • Как в mysql выбрать ближайшую бОльшую и ближайшую мЕньшую запись из базы в 1 запрос?

    @rPman
    В комментариях тебе уже ответили вариант с order by. Запрос order by и limit очень тяжелый для sql сервера, его очень сложно оптимизировать.

    Есть еще min max но тебе нужны id, значит вложенный запрос по timestamp, не уверен что это будет быстрее (лучше поэкспериментируй)
    select * from xxx where
       timestamp=(select min(timestamp) from xxx where timestamp > ...)
    or timestamp=(select max(timestamp) from xxx where timestamp < ...)
    p.s. я заметил что ничего не сказано про одинаковые значения timestamp в разных записях, если брать limit 1 то будет выбираться случайная запись (точнее 100500 раз одна но в какой то момент другая - undefined behavior), этот запрос выдаст все записи с одинаковыми timestamp

    Вообще то sql базы данных не очень подходят к задачам, где есть относительный порядок, будут накладные расходы, причем сильно заметные при больших размерах и больших количествах запросов.

    В каких то ситуациях можно очень СИЛЬНО оптимизировать задачу, если есть какое то знание о том как данные записываются в таблицу. Например если известно гарантированное окно времени, в течении которого поступают данные, и их не сильно много можно просто сделать
    select * from xxx
    where timestamp > date - const_interval
      and timestamp < date + const_interval
    а затем уже среди этих данных выбирать по выше определенным алгоритмам или даже на бакэнде

    Если изменений данных значительно меньше запросов на чтение (особенно если модификации не предполагаются и есть только добавления), то можно складывать искомые значения сразу в момент создания записи (добавлять id новой записи в предыдущую, и тут же ее id в новую), делать это можно как тригерами так и на бакэнде, накладных расходов на такую запись мало зато на чтение данные доступны за константное время, максимально быстро
    select p2.*,p3.* from xxx p1
      left join xxx p2 on p1.id=p2.previous_id
      left join xxx p3 on p1.id=p3.next_id
    where p1.timestamp=...
    в данном случае строчка будет одна, данные раскиданы по колонкам p2.* и p3.*

    В каких то ситуациях можно даже завести отдельный сервис, службу, дающую нужный ответ на порядок быстрее чем любой sql (например за счет того что данные хранятся в оперативной памяти), очень часто этим сервисом может стать тот же бакэнд (если это не cgi приложение), дабы не множить сущности, но если речь идет не об одной физической машине а о кластере, то там есть варианты и сложности.
    Ответ написан
    1 комментарий
  • Laravel Eloquent, where с несколькими вариациями значения столбца?

    iMedved2009
    @iMedved2009
    Не люблю людей
    потому что вы получаете запрос вида where status = 'active' or uid=2 or uid=6; и получаете все варианты.

    1. Использовать whereIn
    ->where('status',  '=' , 'active')
    ->whereIn('uid',  [2,6])
    ->get();


    2. Использовать обертку что бы получить запрос вида where status = 'active' and (uid=2 or uid=6)
    ->where('status',  '=' , 'active')
    ->where(function($builder){
      $builder->where('uid',  '=', '2')
          ->orWhere('uid',  '=', '6');
    })
    ->get();
    Ответ написан
    Комментировать
  • Как залить голосовое сообщение в виде сущности в БД?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    /mp4/123456.mp4

    где mp4 это алиас папки
    А 123456 это идентификатор хранимый в базе.

    А Блобы это гадость!
    Ответ написан
    Комментировать
  • Как осуществить jQuery.post() на чистом JavaScript?

    ThunderCat
    @ThunderCat Куратор тега JavaScript
    {PHP, MySql, HTML, JS, CSS} developer
    1) не используйте инлайновые события, используйте addEventListener и селекторы getElementBy...(), если смысл написать нормальный код
    2) Более современный вариант - fetch()
    3) Более старый вариант XMLHttpRequest
    Ответ написан
    1 комментарий
  • Как осуществить jQuery.post() на чистом JavaScript?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    используйте fetch()

    Пример
    Ответ написан
    Комментировать
  • Как для поля добавить ограничение на вводимые данные?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Не нужно пизать в БД лишнюю логику и лишние ограничения.
    У вас с БД работает какой-то софт, например бэкенд. Там и делайте валидаторы данных. В случае пола раньше можно было 1 и 0 удобно хранить и всё было абсолютно интуитивно и понятно, а русскую букву в качестве индекса держать неудобно и неправильно. Во-первых, она в UTF-8, наверняка, что уже как-то изврат для бинарного поля.
    Во-вторых, при локализации проблемы могут быть в логах надо юникодовую экранировку читать, если что... в общем либо международное F\M, либо кодами и 1\0 для мнемонического запоминания очень удобно. Вот угадайте что есть что и почему.=)

    Но по нынешним временам за такую бинарность могут и засудить=) Не иначе нужна целая таблица гендеров небинарных с названиями, описаниями и локализацией. Да ещё и меняться она будет со временем, а потом при импортах мапить надо одну таблицу полов на другую=).
    Шутки шутками, а 0\1 и тут хорошо лягут. Просто идентификаторы такие будут синтетические.

    Да, а ограничения делать не надо. Вы могли бы сделать триггер, который при изменении и вставке будет проверять значения полей, но лишняя логика амедляет БД и порой без реальной причины. Если система спроектирована верно, то ничего некорректного в БД попасть не должно.
    Многие часто даже от внешних ключей отказываются для ускорения бд, ведь за консистентностью вполне может следить бэкенд, а в каких то случаях лишний процент производительности не помешает.

    Ответ: на надо валидировать значения такого рода полей на уровне БД. Делайте так, чтобы нельзя было ввести неверно на уровне ввода данных от пользователя, и дополнительно валидируйте в бэкенде.
    Ответ написан
    7 комментариев