Преобразование запроса из MySQL V8.0 в V5.6 - PullRequest
0 голосов
/ 06 октября 2018

Я разработал систему, основанную на MySQL V8.0, и, к сожалению, мне нужно понизить версию наиболее используемой версии в веб-хостингах, то есть V5.6.

Мои запросы почти все такие:

SELECT tb_d.*, id_classification 
FROM (
    SELECT ROW_NUMBER() OVER(PARTITION BY '1' ORDER BY od_category ASC, $order_by_gp_mid) AS row_final, tb_c.*
    FROM (
        SELECT ROW_NUMBER() OVER(PARTITION BY id_category ORDER BY MOD(`row` * $prime_group, 512)) AS rd_category, tb_b.*
        FROM (
            SELECT ROW_NUMBER() OVER(PARTITION BY '1' ORDER BY od_category ASC, $order_by_gp_mid) AS `row`, tb_a.*
            FROM (
                SELECT ROW_NUMBER() OVER (PARTITION BY id_category ORDER BY od_category ASC, tb_x.$order_by_gp_mid) AS rn_category, tb_x.*
                FROM (
                    SELECT
                    1, od_category, id_category, `group`, category,
                    id_post, thumbnail, head, visibility, created_datetime, `view`, yeslike, save,
                    lk_post_category_pic_uvw.fk_pic, 
                    ROUND((yeslike + total_save) / view, 3) AS rank_ratio

                    FROM tb_category

                    JOIN (
                        SELECT fk_post, fk_category, fk_pic
                        FROM lk_post_category_pic

                        UNION

                        SELECT fk_post, `from`, fk_pic
                        FROM lk_post_model_pic
                        JOIN tb_model ON tb_model.id_model = lk_post_model_pic.fk_model
                        WHERE `from` != ''
                    ) AS lk_post_category_pic_uvw   ON lk_post_category_pic_uvw.fk_category = tb_category.id_category
                    JOIN tb_post                    ON lk_post_category_pic_uvw.fk_post     = tb_post.id_post
                    LEFT JOIN vw_total_save_by_post ON vw_total_save_by_post.fk_post    = tb_post.id_post

                    WHERE visibility = 'show'

                ) AS tb_x
            ) AS tb_a

            WHERE rn_category <= 35
        ) AS tb_b
    ) AS tb_c

    WHERE rd_category = 1
) AS tb_d

JOIN lk_post_classification_pic ON tb_d.id_post = lk_post_classification_pic.fk_post 
JOIN tb_classification          ON lk_post_classification_pic.fk_classification = tb_classification.id_classification

Поскольку переменная $ order_by_gp_mid может принимать следующие значения:

$order_by_gp_mid = 'created_datetime DESC';
$order_by_gp_mid = 'rank_ratio DESC';
$order_by_gp_mid = '`view` DESC';
$order_by_gp_mid = 'created_datetime DESC';
$order_by_gp_mid = 'created_datetime ASC';

Итак, самой большой проблемой здесь являются строки ROW_NUMBER () OVER (PARTITION BY blabla ...).

Мне нужно переписать эти и многие другие запросы для MySQL 5.6.

Я уже читал много тем здесь в stackoverflow, но я не знаю, как это сделать, потому что мои запросыочень сложные.

Итак, я не знаю, что делать дальше, я совершенно устал от компьютерного программирования.

...