Объявить переменные MySQL - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь объявить переменные и выполнить запрос следующим образом:

$sql = "SELECT @dateconsult := (YEARWEEK('2018-10-01',3)),
               @countunits  := ( SELECT COUNT(s.id_production)
                                 FROM sw_sowing
                                 WHERE status != 0
                                 AND YEARWEEK(date,3) <= @dateconsult
                                 GROUP BY id_production_unit_detail
                               ),
               @quadrants   := ( SELECT DISTINCT value
                                 FROM cf_config
                                 WHERE parameter = 'PLANTHEALTH'
                               );

       SELECT FORMAT(((count_quadrant * 100)/(total_units * Cuadrantes)),3) AS incidence
       FROM (
             SELECT @countunits AS total_units, @quadrants AS Cuadrantes,
             FROM ph_planthealth
             INNER JOIN ph_planthealth_detail ON ph_planthealth_detail.id_p = ph_planthealth.id
             WHERE YEARWEEK(ph_planthealth.date,3) = @dateconsult
             AND ph_planthealth.status = 200
             AND ph_planthealth.id_tenant = 1
             AND ph_planthealth_detail.id_plague != 0
             GROUP BY ph_planthealth_detail.id_plague
      ) AS s
      ORDER BY incidence DESC; ";

    $plague = $this->db->fetchAll($sql, Phalcon\Db::FETCH_ASSOC, $options) ";

проблема в том, что он показывает результат первого SELECT, который является переменными, которые я объявил, а не тот из второго SELECT, который является основным запросом.

Я впервые объявляю переменные и не знаю, правильно ли я это делаю.

Я ценю ваши комментарии и помощь по этой теме.

1 Ответ

0 голосов
/ 31 октября 2018

Вам не нужно делать присвоения переменных в отдельном SELECT. Вы можете сделать это, присоединившись к основному запросу.

SELECT FORMAT(((count_quadrant * 100)/(total_units * Cuadrantes)),3) AS incidence
FROM (
     SELECT @countunits AS total_units, @quadrants AS Cuadrantes,
     FROM ph_planthealth
     INNER JOIN ph_planthealth_detail ON ph_planthealth_detail.id_p = ph_planthealth.id
     WHERE YEARWEEK(ph_planthealth.date,3) = @dateconsult
     AND ph_planthealth.status = 200
     AND ph_planthealth.id_tenant = 1
     AND ph_planthealth_detail.id_plague != 0
     GROUP BY ph_planthealth_detail.id_plague
) AS s
CROSS JOIN (
    SELECT @dateconsult := (YEARWEEK('2018-10-01',3)),
           @countunits  := ( SELECT COUNT(s.id_production)
                             FROM sw_sowing
                             WHERE status != 0
                             AND YEARWEEK(date,3) <= @dateconsult
                             GROUP BY id_production_unit_detail
                           ),
           @quadrants   := ( SELECT DISTINCT value
                             FROM cf_config
                             WHERE parameter = 'PLANTHEALTH'
                           )
) AS vars
ORDER BY incidence DESC
...