как использовать другое предложение WHERE в левом соединении

0

У меня есть два текстовых поля, я разместил каждое значение текстового поля в запросе MySQL специально в WHERE CLAUSE.

$sWhere = " WHERE MONTH(Inspection_datetime) = '".$Month."' AND 
            YEAR(Inspection_datetime) = '".$Year."' ";

Затем я попытался объединить этот запрос, как показано ниже:

$sQuery = "SELECT A.id,A.Line,
                  week1.1st, week2.2nd, week3.3rd, week4.4th, week5.5th,
                  IFNULL(week1.1st,0) + IFNULL(week2.2nd,0) + IFNULL(week3.3rd,0)
                + IFNULL(week4.4th,0) + IFNULL(week5.5th,0) AS Total
           FROM inspection_report AS A
           LEFT JOIN(
                     SELECT Line, (SUM(S) + SUM(A) + SUM(B)*0.4 +
                                   SUM(C)*0.1)/COUNT(Serial_number) AS 1st
                     FROM inspection_report
                     WHERE DAY(Inspection_datetime) BETWEEN 1 AND 7
                     GROUP BY Line, WEEK(Inspection_datetime),
                                    YEAR(Inspection_datetime)
                     ) AS week1 USING (Line)

                 LEFT JOIN(
                           SELECT Line, (SUM(S) + SUM(A) + SUM(B)*0.4 + SUM(C)*0.1)/COUNT(Serial_number) AS 2nd
                           FROM inspection_report
                           WHERE DAY(Inspection_datetime) BETWEEN 8 AND 14
                           GROUP BY Line, WEEK(Inspection_datetime), YEAR(Inspection_datetime)
                           ) AS week2 USING (Line)";
.........//SAME LIKE ABOVE JUST CHANGE INTO another week range

$sWhere = " WHERE MONTH(Inspection_datetime) = '".$Month."' AND
           YEAR(Inspection_datetime) = '".$Year."' ";

$sGroupBy = " GROUP BY A.Line ";
$sQuery.= $sWhere.$sGroupBy;

Я хочу, чтобы он мог подсчитывать данные еженедельно, а также он может фильтровать $Month и $Year.

Но я получил неверный результат. Данные о количестве результатов еженедельно за весь месяц и весь год. Как это сделать, чтобы исправить это?

  • 0
    Вы хотите знать, почему ваш запрос неверен, или как вы можете получить результаты?
  • 3
    Помните атаки SQL-инъекций .
Показать ещё 1 комментарий
Теги:
join
count
group-by
where-clause

1 ответ

0
Лучший ответ

Вам нужно добавить WHERE MONTH(Inspection_datetime) = '".$Month."' AND YEAR(Inspection_datetime) = '".$Year. для каждого подзапроса

В вашем текущем запросе есть пара ошибок:

  • Вы присоединяетесь к таблице только с помощью поля Line, что вы говорите, что MySql делает, это найти строки, которые содержат данные за месяц и год, и для этих строк вытягивать все свои еженедельные данные.
  • Вы объединяете и группируете таблицы несколько раз (один раз в неделю), есть ли необходимость в этом? Запрос будет намного быстрее, если вы сможете получить еженедельные результаты по строкам.
  • Вы создаете новый дополнительный запрос для каждых 7 дней месяца, но хотите показать результаты неделя
  • 0
    На самом деле я хочу считать данные еженедельно в течение одного месяца. Итак, я использую МЕЖДУ 1 И 7 и так далее, пока мы не встретимся на 5-й неделе. Какой лучший способ получить правильный результат, используя правильный запрос?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню