2013-03-22 6 views
1

У меня есть 2 таблицы:MySQL - Subquery Состояние

tbl_projects tbl_projects_tasks

Это простой интерфейс управления задачами. Задачи назначаются проектам. У меня также есть столбец внутри таблицы задач, называемый percentage, который является целым полем. Я держу его от 0 - 100, естественно, в процентном отношении.

Кроме того, в таблице проектов у меня есть еще один столбец под названием: projectpercentagedone

В этом столбце Averages все задачи, связанные с проектом.

Вот запрос, который делает усреднение (с использованием одного ProjectID в моем примере):

UPDATE `tbl_projects` SET 
`totaltasks` = (SELECT COUNT(taskid) AS T1 FROM `tbl_projects_tasks` WHERE projectid = 10), 
`projectpercentagedone` = (SELECT AVG(percentage) AS T2 FROM `tbl_projects_tasks` WHERE projectid = 10) 
WHERE projectid = 10 
LIMIT 1 

Я хочу пойти на шаг дальше, к более продвинутым причинам настройки.

Если общее AVG является 100%, я хотел бы обновить projectvisible из tbl_projects от 1 к 0.

Конечно, я мог бы сделать 2 запроса в отделении. Но я уверен, что один запрос более крутой. Этот тип условного утверждения немного выше моего опыта. Я ищу небольшую помощь в этом.

ответ

1

Вы можете просто присоединиться к tbl_projects в подзапрос, который выполняет некоторые вычисления на tbl_projects_tasks.

UPDATE tbl_projects a 
     INNER JOIN 
     (
      SELECT projectid, 
        COUNT(taskID) totalCount, 
        AVG(percentage) avgPercent 
      FROM tbl_projects_tasks 
      GROUP BY projectid 
     ) b ON a.projectid = b.projectid 
SET  a.totaltasks = b.totalCount, 
     a.projectpercentagedone = b.avgPercent, 
     a.projectvisible = IF(b.avgPercent = 100, 0, 1) 
WHERE a.projectid = 10 
+0

Я вижу, где вы собираетесь. Ваш запрос получает синтаксическую ошибку sql, но я ее корректирую ..... – coffeemonitor

+0

Какова точная ошибка, которая была сгенерирована, поэтому я могу исправить запрос. –

+0

'# 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «COUNT (taskid) totalCount, AVG (%) avgPercent» по строке 5' Я менял его, просто чтобы убедиться, что я сделал это Ничего. Извините за задержки – coffeemonitor