У меня есть два текстовых поля, я разместил каждое значение текстового поля в запросе 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
.
Но я получил неверный результат. Данные о количестве результатов еженедельно за весь месяц и весь год. Как это сделать, чтобы исправить это?
Вам нужно добавить WHERE MONTH(Inspection_datetime) = '".$Month."' AND YEAR(Inspection_datetime) = '".$Year.
для каждого подзапроса
В вашем текущем запросе есть пара ошибок:
Line
, что вы говорите, что MySql делает, это найти строки, которые содержат данные за месяц и год, и для этих строк вытягивать все свои еженедельные данные.