• Ошибка 1055 в MySQL означает что выбираемые значения должны быть и в GROUP BY и в SELECT одновременно?

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

    В данном случае Вы выбираете p.name, которого нет в ->groupBy('p.user') и которое не есть аргумент агрегатки. Добавьте его в выражение группировки, ->groupBy('p.user, p.name') (а если оно уникально в пределах одного p.user, то хватит и ->groupBy('p.name')).
    Ответ написан
    Комментировать
  • Какой формат для pg_dump порекомендуете?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Чем более "непохожи" серверы, тем проще должен быть формат дампа.

    Но начинать надо в любом случае просто с проверки совместимости. Сделайте тест-БД, пара таблиц с FK, одна функция, одна процедура, один триггер... потом забэкапьте и в скриптовый, и в архивный форматы, и проверьте, как на конкретно Вашем хосте пройдёт восстановление.
    Ответ написан
    1 комментарий
  • Почему система требует большой размер файла подкачки?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Объём файла подкачки выставляется операционной системой при инсталляции по предустановке типа ~1.8 от объёма оперативной памяти. Никаких иных резонов нет, никакие иные соображения в этом не участвуют.

    Рекомендую изменить установки размера файла подкачки следующим образом:
    • нижний предел - 8 Гбайт
    • верхний предел - не ограничен


    Если физических дисков в системе несколько - то в загрузочном разделе установите нижний и верхний порог по 8Гбайт, на каком-либо разделе самого быстрого диска (и где не жалко места) - от нуля до неограничено, на остальных не применять.

    Если диск один, но несколько разделов, то в загрузочном разделе установите нижний и верхний порог по 8Гбайт, на каком-либо другом разделе, где не жалко места - от нуля до неограничено, на остальных не применять.
    Ответ написан
    Комментировать
  • VMware Workstation Pro как создать виртуальную сеть между двумя машинами?

    @Akina
    Сетевой и системный админ, SQL-программист.
    1. Подключаете первый сетевой интерфейс Сервера к VMNet8, второй к VMNet2.
    2. Подключаете сетевой интерфейс Клиента к VMNet2.
    3. Запускаете Сервер, отключаете второй сетевой адаптер, на первом ставите получение настроек по DHCP. Проверяете, что на Сервере есть доступ к Интернету.
    4. Включаете на Сервере второй сетевой адаптер.
    5. Открываете на Сервере свойства первого адаптера и включаете на нём "Общий доступ к Интернету".
    6. Запускаете Клиент, ставите на нём получение настроек по DHCP.
    7. Проверяете, что Клиент нормально получил адрес.
    8. Проверяете, что Сервер и Клиент взаимопингуемы.
    9. Проверяете, что на Клиенте есть доступ к Интернету.


    На Клиенте доступ к Инету будет только при запущенном Сервере.
    Ответ написан
  • Как вывести список клиентов с непрерывной историей за год?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT ID_client
    FROM Transactions_info
    WHERE date_new BETWEEN @first_day_of_period
                       AND @last_day_of_period
    GROUP BY ID_client
    HAVING COUNT(DISTINCT date_new) = DATEDIFF(@last_day_of_period, @first_day_of_period) + 1
    Ответ написан
    6 комментариев
  • Правильный синтаксис при заполнении графы в таблице в соотношении из другой?

    @Akina
    Сетевой и системный админ, SQL-программист.
    UPDATE posts p
    JOIN communitiesusers cu USING (userid)
    SET p.communityid = cu.communityid 
    WHERE p.communityid IS NULL; -- или, может быть, p.communityid = ''
    Ответ написан
    1 комментарий
  • Sequelize - Как исправить ошибку (errno: 150 "Foreign key constraint is incorrectly formed)?

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

    Либо добавляйте столбцы внешнего ключа позже с различными миграциями (только для добавления столбца).
    Ответ написан
    Комментировать
  • Как сместить значение поля position на +1?

    @Akina
    Сетевой и системный админ, SQL-программист.
    CREATE PROCEDURE move_rows ( IN position_move_from INT,
                                 IN position_move_to INT )
    UPDATE test 
    SET pos = CASE WHEN id = position_move_to
                   THEN position_move_from
                   ELSE pos + SIGN(position_move_to - position_move_from)
                   END
    WHERE id BETWEEN LEAST(position_move_from, position_move_to)
                 AND GREATEST(position_move_from, position_move_to)
    ORDER BY id = position_move_to;


    DEMO fiddle
    Ответ написан
    Комментировать
  • Как вставить данные из другой базы?

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

    Да, есть. The FEDERATED Storage Engine.

    Как это сделать на PHP?

    На первом сервере выполнить SELECT .. INTO OUTFILE.
    Переместить полученный файл в место, доступное со второго сервера.
    На втором сервере выполнить LOAD DATA INFILE.
    Ответ написан
    Комментировать
  • Почему в phpmyadmin название таблиц не отображается с регистром букв?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Регистрозависимость имён таблиц в MySQL определяется значением системной переменной lower_case_table_names. См. Identifier Case Sensitivity.

    Что же касается отображения имён в phpmyadmin - то это вопросы к нему, а не к MySQL. Можно попробовать выяснить экспериментально, как он реагирует на изменение значения указанной переменной, а также на явное квотирование имён бэктиками.
    Ответ написан
    3 комментария
  • Можно ли написать sql запрос на вывода последнего элемента?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT DISTINCT
           FIRST_VALUE(column_1) OVER (ORDER BY column_1 IS NULL, id DESC) column_1,
           FIRST_VALUE(column_2) OVER (ORDER BY column_2 IS NULL, id DESC) column_2
    FROM test;

    Если в "пустых" полях не NULL, а пустые строки, то соответственно
    SELECT DISTINCT
           FIRST_VALUE(column_1) OVER (ORDER BY column_1 = ' ', id DESC) column_1,
           FIRST_VALUE(column_2) OVER (ORDER BY column_2 = ' ', id DESC) column_2
    FROM test;

    fiddle

    Требуется MySQL версии 8+.
    Ответ написан
    Комментировать
  • Позволяют ли партишены делать такое?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Можно ли создать партишен ... куда бы попадали данные только за последние 365 дней

    Нет, динамические границы раздела - такое в принципе невозможно.

    В документации показаны примеры. Когда создается базовая таблица table_base и дальше от нее создаются партишены
    Не лезьте в высокие материи, не зная основ. Начните с самого обычного RANGE PARTITIONING. Одна таблица - куча разделов, и никаких надтаблиц.
    Ответ написан
  • Как удалить строку из 2-х таблиц одним запросом?

    @Akina
    Сетевой и системный админ, SQL-программист.
    что не так делаю?

    Полагаете, что запись с указанным ID существует.

    Если в table_1 такой записи нет - никаких удалений не будет, даже если во второй таблице есть такие записи.

    В общем случае для решения задачи одним запросом необходим FULL JOIN. Но увы, MySQL его не поддерживает. А потому в общем случае задача нерешаема.
    Ответ написан
    Комментировать
  • Для чего маршруты 255.255.255.255/32 в таблице маршрутизации?

    @Akina
    Сетевой и системный админ, SQL-программист.
    255.255.255.255 - бродкаст сети 0.0.0.0/0. Т.е. глобальный бродкаст.

    Именно поэтому он присутствует для каждого локального адреса. При поступившем в IP-стек запросе на отправление пакета на адрес глобального бродкаста от какого-либо приложения он будет отправлен через каждый имеющийся логический интерфейс (локальный IP-адрес). Аналогично он будет принят с любого интерфейса и обработан системой.
    Ответ написан
    Комментировать
  • Как проверить матрицу смежности неориентированного графа на верность?

    @Akina
    Сетевой и системный админ, SQL-программист.
    rastr, как понимать Ваше
    написать не выходит
    , если Вы тут же приводите код - который, кстати, способен решить задачу. Ну разве что:
    1. Итерация идёт по отдельному столбцу либо строке - так что ставить верхнюю границу для i по всей матрице несколько неправильно
    2. По i надо итерировать до предпоследнего значения, а по j - от значения на 1 больше текущего i до последнего. Ибо если проверена какая-то пара, то нет смысла проверять её ещё раз "с обратной стороны", а уж равенство элемента самому себе так и вовсе проверять бессмысленно.

    В общем, приблизительно так (без точного соблюдения синтаксиса)
    bool is_adjacency_matrix_correct(const vector<string>& matrix) {
      size=matrix[0].size();
      for (auto i = 0; i < size-1; i++) {
        for (auto j = i+1; j < size; j++) {
          if (matrix[i][j] != matrix[j][i])
            return false;
        }
      }
      return true;
    }
    Ответ написан
    Комментировать
  • Как исправить ошибку индекса PRIMARY базы данных mysql bitrix24?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Факт 1

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

    Факт 2

    Я перенёс портал из облака в коробку


    Итого

    Факты свидетельствуют о том, что перенос был выполнен некорректно. Для исправления - удалите поле id, а затем создайте первичный индекс с указанными тремя полями.

    Для проверки - предварительно подключитесь к старой версии таблицы и проверьте, действительно ли в ней отсутствует автоинкрементное поле по фамилии id. А в качестве совсем бреда - сравните, какая СУБД (включая точную версию) на старом и на новом месте.
    Ответ написан
    Комментировать
  • PostgreSQL: как дождаться ввода пароля при запуске скрипта?

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

    @echo off
    cls
    SET /P psqlpassword="Введите пароль (Enter для завершения): "
    if "%psqlpassword%"=="" exit /b
    "C:\Program Files\PostgreSQL\13\bin\psql.exe" -U postgres -W %psqlpassword% -f  D:/script.sql -a 
    pause


    Если пароль введён неверно, будет отображено сообщение об ошибке, и выполнение пойдёт дальше.

    Если надо заново запросить пароль, следует использовать проверку на ошибку:

    @echo off
    :execute_psql
    cls
    SET /P psqlpassword="Введите пароль (Enter для завершения): "
    if "%psqlpassword%"=="" exit /b
    "C:\Program Files\PostgreSQL\13\bin\psql.exe" -U postgres -W %psqlpassword% -f  D:/script.sql -a 
    if errorlevel 1 goto :execute_psql
    pause


    Правда, нужно убедиться, что psql.exe её возвращает, что не факт. Также следует убедиться, что он не возвращает ошибки в иных ситуациях, когда повторный запрос пароля и запуск не требуются, или ввести проверку на код ошибки.
    Ответ написан
  • Ошибка в mysql таблица не может быть создана в зарезервированном табличном пространстве mysql?

    @Akina
    Сетевой и системный админ, SQL-программист.
    mysql - это служебная БД. В ней как бы нежелательно создавать пользовательские таблицы.

    Если Вы хотите создать копию таблицы, делайте импорт в рабочую/временную базу данных. При этом убедитесь, что в дампе нет указания создавать таблицу именно в базе mysql (или явно отключите это при создании дампа).
    Ответ написан
    1 комментарий
  • Скорость загрузки не соответствует скорости интернета?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Но мы знаем что 1Мбайт/с = 8Мбит/с.

    Вы неправильно знаете. Для загрузки со скоростью 1 мегабайт в секунду надо иметь входной канал не менее 8.8 Mbps. Причём именно inbound. Даже два компа, соединённые напрямую 100 Mbps, когда никто не мешает, ни в жисть не выжмут скорость передачи 12.5 Мб/с, которую Вы насчитали... хорошо если 10.8 получится.

    как решить проблему

    Здесь нет проблемы. Почитайте, что такое "узкое место".

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

    @Akina
    Сетевой и системный админ, SQL-программист.
    3 эконома, 14 комфорта, 9 бизнеса, 4 премиум.


    Итого 3+14+9+4=30.

    Теперь нумеруем каждый тип по отдельности (используем целочисленное деление с остатком).

    Эконом - 1,2,3,31,32,33,61,62,63...
    Комфорт - 4,5,..,16,17,34,35,...
    Бизнес - 18,19,..25,26,48,49,...
    Премиум - 27,28,29,30,57,58,...

    И теперь сортируем при пагинации по этому номеру.

    Оно, конечно, всё равно поплывёт, когда какой-то тип закончится - но хоть не с самого начала.

    PS. Но вообще-то клиент, увидев на странице дикие скачки цен, и прыжки вверх-вниз между страницами, скорее всего закроет этот бред, чтобы мозг не поломался.
    Ответ написан
    Комментировать