Сократить 3 запроса до одного SQL запроса для нумерации на стороне сервера - PullRequest
0 голосов
/ 19 февраля 2020

По сути, мне нужно восстановить результат 3 запросов, в одном запросе (для нумерации страниц на стороне сервера). Это немного сложно.

Вот диаграмма, содержащая обязательные поля.

e

Нужны два столбца, результаты которых мне нужны задачи, связанные с функцией (количество).

Этот первый запрос успешно восстанавливает все строки, кроме двух, которые мне нужны.

SELECT DISTINCT vue_cdc_for_opera.libelle as CDC,
                               vue_cdc_for_opera.id_cdc as \"id\",
                               COALESCE(vue_cdc_for_opera.signe_ue, vue_cdc_for_opera.signe_fr) as Signe,
                               vue_cdc_for_opera.classe_ue as \"Classe produit\",
                               vue_cdc_for_opera.code_cdc as \"Code CDC\",
                               dt_bdd_produit.libelle_dt as DT,
                               0 as \"Nombre OCO\",
                               0 as \"Nombre Operateur\"
                FROM vue_cdc_for_opera
                    INNER JOIN cdc_postgresql ON vue_cdc_for_opera.code_cdc = cdc_postgresql.code_cdc
                    INNER JOIN dt_bdd_produit ON vue_cdc_for_opera.id_dt = dt_bdd_produit.id_dt
                    ORDER BY " . $order . " " . $sortOrder . "
                    OFFSET :offset
                    LIMIT :limit

Чтобы получить «Оператор Nombre», я запускаю следующий запрос:

  SELECT
            COUNT(o.id) as \"Nombre Opérateurs\"
            FROM habilitation
            INNER JOIN operateur o ON habilitation.id_operateur = o.id and o.actif = true
            WHERE habilitation.id_cdc_postgresql = :idCdc
            AND habilitation.actif = true

, чтобы получить «Nombre OCO», я запускаю следующий запрос:

SELECT id_oc, oc FROM vue_for_lien_oco_cdc WHERE oc != '' AND code_cdc = :codeCdc;

По сути, мне нужно восстановить все в одном запросе, чтобы возможность заказать "Nombre Operateur" и "Nombre OCO" в нумерации на стороне сервера, и это выше моих текущих навыков SQL. :params относится к связанным параметрам позже в коде PHP.

Мне сказали, что это возможно со встроенной функцией SQL внутри запроса, но я не уверен когда начать. Это выполнимо, есть ли у вас какие-либо преимущества или вы можете помочь?

1 Ответ

0 голосов
/ 19 февраля 2020

Я не знаю, как сделать COALESCE и ON в первом и втором запросах, используя DQL, но для последнего мы можем иметь:

$qb->createQueryBuilder('o')
->from(<insert your entity class here>)
->where('o.oc <> ""')
->andWhere('o.code_cdc = :codeCdc')->setParameter('codeCdc',$<insert variable for code_cdc>)
->getQuery()
->getResult();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...