Переменные SQL не работают в MariaDB

В моем запросе мне нужно получить предыдущую строку с текущей строкой, а затем присоединиться к нескольким таблицам. Я получил предыдущую строку, используя переменные SQL на моем сервере разработки (MySQL 5.7), все работает нормально, но на моем производственном сервере (MariaDB 10) результаты предыдущих строк плохие, просто смешанные, плохая часть - это только предыдущая строка с переменными SQL другие части запроса работают хорошо.

Мой запрос:

                                  customers.title,
                                  calendar.start_time, 
                                  calendar.hours_per_time,
                                  calendar.self_certification,
                                  calendar.bulletin_certification,
                                  calendar.extra,
                                  @previous_start AS previous_start,
                                  @previous_start := calendar.start_time,
                                  @previous_end AS previous_end,
                                  @previous_end := calendar.hours_per_time,
                                  DATE_FORMAT(calendar.date, '%d-%m') AS day_month,
                                  TIME_FORMAT(calendar.start_time, '%H:%i') AS hours_min

        FROM
          (SELECT @previous_start := '00:00', @previous_end := '0.00') AS calendar_prev, calendar

            INNER JOIN relationships ON calendar.relation_id = relationships.relation_id
            INNER JOIN customers ON customers.customer_id = relationships.customer_id
            WHERE relationships.user_id = '$user_id'
            AND DATE_FORMAT(calendar.date, '%m-%Y') = '$date'
        ORDER BY calendar.date, hours_min ASC

Дело в том, что MySQL не дает никаких гарантий относительно порядка выполнения оператора select. Итак, хотя вы ожидаете, что эти операторы переменных сеанса будут выполняться в определенном порядке, это может быть не так, и вы можете увидеть разное поведение в разных версиях MySQL.

Tim Biegeleisen 23.03.2018 13:45

Если у вас MariaDB 10.2, используйте его функции «Windowing» для работы с «предыдущими» и «текущими» строками.

Rick James 05.04.2018 04:31
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
2
153
0

Другие вопросы по теме