Задать вопрос
  • Есть вариант сохранить в поле json (mysql) массив с нужным порядком?

    @Akina
    Антон Шаманов,
    в вопросе указано что речь о mysql т.ч. нет смысла рассматривать другие субд

    Заданный мне вопрос о том, почему меня это беспокоит, и на который я ответил, не связан с СУБД.

    учитывая что данные передаются из php и конвертируются с помощью json_encode(), то подобные проблемы не актуальны

    Для вопроса автора как раз актуальны - собственно, именно у автора всё и корячит от изменения физического порядка.

    данные передаются из php и конвертируются с помощью json_encode()

    Я до сих пор так и не увидел, как точно всё это выглядит. Вы пытаетесь описывать то, как это выглядит со стороны PHP, тогда как я прошу показать, как оно же выглядит со стороны MySQL. Я знаю, что PHP-шники практически всегда не заморачиваются на этот вопрос, хотя напрасно - обычно именно так и можно увидеть суть их проблем.

    И, по-моему, автор вообще уже восклал на этот свой вопрос и занялся чем-то другим.
  • Есть вариант сохранить в поле json (mysql) массив с нужным порядком?

    @Akina
    Антон Шаманов,
    я не понимаю почему это тебя беспокоит - '{"a": 1, "a": 2}' сохраняется в JSON поле как '{"a": 2}'

    В MySQL - да.
    В MariaDB - нет, что положил, то и получишь.
    Oracle 21c не сохранит, ругнётся на дублирование.
    PostgerSQL поведёт себя как MariaDB. Но если сменить тип данных на JSONB - то как MySQL.
    SQLite ведёт себя как MariaDB - и для JSON, и для JSONB.
    Остальные популярные СУБД скажут "А чой-та за тип данных такой?"

    Это при прямой вставке одного документа, имеющего дублирование имени свойства. Уже как бы безрадостно. Хотя и есть чёткое деление - в зависимости от того, используется ли бинарное представление или текстовое.

    Ещё хуже становится, когда выполняется добавление одного документа ко второму (слияние). С одной стороны, RFC 7396. С другой, операция, выполняемая JSON_MERGE_PRESERVE в MySQL (вот лень проверять остальные СУБД) не кажется мне нелогичной...
  • Есть вариант сохранить в поле json (mysql) массив с нужным порядком?

    @Akina
    Антон Шаманов, я про RFC 7158, 7159, 8927 и пр.
    Так-то да, отсутствие такого требования с учётом отсутствия понятия относительного местоположения - нелогично. Потому практически все реализации такое требование уникальности реализуют, либо в крайнем случае объявляют несуществующим взаимные порядок для совпадающих.
    Собственно, обычная трудность... то же наблюдается, скажем, с агрегированием и с оконными функциями в SQL
  • Есть вариант сохранить в поле json (mysql) массив с нужным порядком?

    @Akina
    Антон Шаманов,
    xз при каких ситуациях это играет роль - порядок свойств в объекте ведь не важен

    ЕМНИП стандарт не накладывает требования уникальности на имя свойства в объекте...
  • Есть вариант сохранить в поле json (mysql) массив с нужным порядком?

    @Akina
    Антон Шаманов,
    data_json используется для хранения исходного варианта и поэтому тип поля text

    Потому значение и остаётся как было, что оно TEXT. Даже ты, прекрасно на глаз определяющий, что некое значение есть валидный JSON, никогда не сможешь определить, является ли показанное тебе значение значением типа JSON, или это просто текст, который число случайно может быть интерпретирован как валидный JSON. А сервер этого делать просто не будет. Ему сказали - текст, и всё, вот хоть война, хоть застрелись, а это текст, и его надо хранить так, как было.

    DEMO FIDDLE. TEXT и JSON в одном флаконе, разница видна невооружённым глазом.
  • Есть вариант сохранить в поле json (mysql) массив с нужным порядком?

    @Akina
    Антон Шаманов,
    data_string: text

    Вы, извините, каким местом читаете?
    TEXT - вот ни разу не JSON.
  • Есть вариант сохранить в поле json (mysql) массив с нужным порядком?

    @Akina
    mysql порядок передаваемых значений по умолчанию не изменяет.

    Если тип поля JSON, а тип JSON-документа (или субдокумента) объект - изменяет.
  • Возможен ли такой роутинг через 2 сетевые карты?

    @Akina
    необходимо чтобы из сети *.20.0/24 так же видели 10ю подсеть.

    Что такое "видели"? Подробно. В зависимости от того, что имеется в виду, решения будут разными. На всякий случай - точные версии ОС клиентских машин, которые "должны видеть".

    На хосте №1 установлен SQL сервер и машины из *.10.0/24 прекрасно обращаются к нему

    А при чём тут SQL сервер (какая СУБД, кстати, уж коли речь зашла...)? какое он может иметь отношение к "видимости" станций через промежуточный узел?

    Имеется 2 компа вин10:

    Какая версия (подробно и точно) на компе с двумя сетевыми? вариант (хоум, проф, веб, мм и т.п.)...
  • Как установить параметры в mysql innodb_buffer_pool_size?

    @Akina
    Я пытаюсь установить вот эти параметры в mysql

    Как именно? подробно по шагам от момента принятия решения изменить и до понимания, что не изменилось.
  • Как вывести данные таблицы в соответствии ее ссылке?

    @Akina
    ... WHERE LOCATE('rostov', 'https://www.golden-ring.ru/rostov/main.htm')

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

    @Akina
    Мой личный рекорд (лет 20 назад) - связь через кабель длиной 230 метров между двумя свичами 3СОМ (10Мбит полудуплекс, 0% потерь). Кабель, правда, лежал в коробке.

    Реально - при хорошем проводе и правильной прокладке (в лотке, не тянуть, плавные повороты, нет сторонних полей) 130 метров работает всегда, 150 достаточно часто. Но даже такой сегмент тебе при проектировании зарежут. Ибо стандарт гарантирует только 100 метров. Да и то, такие расстояния - если все компоненты соответствуют стандарту. Скажем, люминевый омеднённый кабель - вот даже не надейся, он и на 100 может засбоить...

    помощь в случаях, когда 100 метрами не обойтись, и приходится (пусть ненамного) превышать это ограничение.

    Ставить промежуточную активку. В самом крайнем случае - РоЕ репитер. Это куда как лучше, чем лотерея с "превышением ненамного". Хотя если ты сделал, сдал и забыл... то это проблемы того, кто принял.

    любому технически грамотному человеку понятно, что не может быть такого - на 100 м работает, а на 101 не работает.
    Вот когда тебе надо будет подняться на крышу дома в 101 метр высоты по лестнице, которая кончается на 100 метрах, тогда мы на тебя и посмотрим.
  • Можно ли как-то перенести MySql базу в Sql базу которая находится в Visual studio?

    @Akina
    Василий Банников,
    Может там и хранимые процедуры есть?

    Давным-давно, лет ещё десять назад, в документации было явно написано следующее:

    In order to achieve simplicity, SQLite has had to sacrifice other characteristics that some people find useful, such as high concurrency, fine-grained access control, a rich set of built-in functions, stored procedures, esoteric SQL language features, XML and/or Java extensions, tera- or peta-byte scalability, and so forth.

    С того времени ничего не поменялось.
  • Можно ли как-то перенести MySql базу в Sql базу которая находится в Visual studio?

    @Akina
    Василий Банников, документация по SQLite с Вами не согласна.
    https://www.sqlite.org/lang_createtrigger.html
    Да и практика использования триггеров в SQLite заставляет усомниться в Вашем утверждении...
  • Можно ли как-то перенести MySql базу в Sql базу которая находится в Visual studio?

    @Akina
    хочу чтобы база была теперь встроена в само приложение.

    Посмотри в сторону embedded DBMS. Например, можно взять SQLite - одна библиотека доступа и один файл с БД, запихнуть в инсталлятор как нечего делать.
  • Как получить последнее значение поля при группировке по другому полю?

    @Akina
    Как оптимальным способом реализовать действие функции LAST, которой нет в mysql

    А где она есть-то? ну кроме MS Access...

    Во всех диалектах, где есть, функция, выполняющая выбор по позиции при сортировке по другому полю, делается функцией FIRST_VALUE(). Либо подзапросом, для одного поля - коррелированным в SELECT, для группы полей или всей записи - агрегирующим во FROM.
  • Порекомендуйте подходящую базу данных?

    @Akina
    Во всех описанных выборках/отчётах присутствует, практически как базовый и обязательный, фильтр по дате. Что явно наталкивает на мысль использовать партиционирование. 80М записей в день - это 2,5Г в месяц, так что партиционирование по году-месяцу и субпартиции по, например, домену, как бы напрашивается. И проблемы с увеличением времени вставки должны просто исчезнуть.

    Это - для именно MySQL.
  • Как получить родительскую категорию у подкатегории?

    @Akina
    Научитесь уже "мухи налево, котлеты направо"... а то у Вас и не SQL, и не PHP, а какая-то помесь. Текст запроса, который получит нужное, ну никаким образом не зависит от того, какой язык и с помощью какой технологии его будет выполнять. Так что сначала решаем задачу на SQL, и только потом запихиваем запрос в PHP-код.

    Запрос-то вроде правильный. Только вот Вы выводите не то, что нужно.
    SELECT categories.name,
           tovar.status, 
           tovar.created_at, 
           c.name subcategory,
           pc.name root_category
    FROM tovar 
    LEFT JOIN categories c ON tovar.categories_id = c.id
    LEFT JOIN categories pc ON c.parent_id = pc.id
    WHERE tovar.status = :status 
    ORDER BY tovar.created_at DESC

    Не знаю, есть там в таблице категорий поле name или нет... в общем, выводите что из таблиц реально надо.

    PS. И я не понимаю, нафига LEFT JOIN. Даже если представить, что подкатегория не введена или что у указанной категории нет родительской - во радости смотреть на NULL...
  • Как получить родительскую категорию у подкатегории?

    @Akina
    OptimusPrime5645, "не сработало" - неинформативно. Покажите запрос, который написан по данному Вам совету (кстати, совершенно правильному).
  • Как получить родительскую категорию у подкатегории?

    @Akina
    Есть категории, есть подкатегории.

    Всего один уровень? или у подкатегорий есть свои подкатегории, и формально уровень вложенности не ограничен?
  • Как использовать "Case when" в "after update" триггере?

    @Akina
    Что должно означать вот это выражение, записанное в первом условии CASE:
    new.`Poli_csl` where `id` = new.id < 10
    Это должно было быть выражение. А вместо него написано чёрт те что...

    Если я верно понимаю логику кода, то будет нечто типа
    CREATE TRIGGER post_2
    AFTER UPDATE ON slid 
    FOR EACH ROW
    UPDATE `harld`.`post_cost` 
    set `Removal_pl` = (select `Model_R_Hr` * `Time_hr` * CASE WHEN (select `Poli_csl` 
                                                                     from slid 
                                                                     where slid.id = new.id LIMIT 1) < 10
                                                               THEN 0.3
                                                               ELSE 1
                                                               END 
                        from rate 
                        where rate.id = new.id LIMIT 1);