2011-01-19 2 views
0

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

$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's 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 Injection Attacks] (http://xkcd.org/327). –

+0

на самом деле я хочу подсчитывать данные каждую неделю. Затем отсортируйте их по выбранному Месяцу и Году. – klox

ответ

0

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

Есть несколько вещей неправильно с текущим запросом:

  1. Вы присоединяетесь к таблице на Line поля только то, что вы говорите MySql чтобы найти, найти строки, которые имеют данные за месяц и год, и для этих строк вытягивать все свои еженедельные данные.
  2. Вы присоединяетесь и группируете таблицы несколько раз (один раз в неделю), есть ли необходимость в этом? Запрос будет намного быстрее, если вы сможете получать еженедельные результаты по строкам.
  3. Вы создаете новый подраздел запрос на каждые 7 дней месяца, но хотите, чтобы показать результаты на недели
+0

На самом деле я хочу подсчитывать данные еженедельно в течение одного месяца. поэтому я использую BETWEEN 1 AND 7 и так далее, пока мы не встретим пятую неделю. Какой лучший способ получить правильный результат, используя правильный запрос? – klox

Смежные вопросы