![]() |
|
|
|
|
#1
|
|||
|
|||
|
Уважаемые форумчане, имеется такая проблемка, недавно столкнулся с mysql, так что не совсем пойму как это делается, итак
Имеются таблица описывающая рабочие проекты в базе mysql, каждый проект состоит из некоторых составляющих, которые находятся в другой таблице. Составляющие имеют статус: не начато, в работе, выполнено. проект считается завершенным если выполнены все его составляющие, и "в работе", если хотя бы одна составляющая не начата, либо все еще в работе. ...... как выявить исходя из составляющих какой проект выполнен, а какой нет |
|
#2
|
||||
|
||||
|
Отвечу в таком-же "жадном" стиле:
- Запросом к таблице на проверку статуса. |
|
#3
|
|||
|
|||
|
чтоб было более ясно
главная таблица ('id','name'); подтаблица ('id','project_id','exec','status') Последний раз редактировалось freedomman, 24.11.2011 в 09:54. |
|
#4
|
||||
|
||||
|
Тогда можно так попробовать:
Код:
-- Незаконченные проекты
select * from Project
where Exists(select * from Task
where Project.Id=Task.ProjectId and Task.Status <> 1)
-- Законченные проекты
select * from Project
where not Exists(select * from Task
where Project.Id=Task.ProjectId and Task.Status <> 1) |
|
#5
|
|||
|
|||
|
спасибо, но немного не то, выводит те проекты в котором хотя бы одно из значений таблицы Task поля Task.Status =1,
например если в project следующие поля |1|project1| а в task: |1|1|МаША|1| |2|1|Саша|0|, то он посчитае этоот проект как выполненный , а нельзя как нибудь сделать через count, я тут немного поднакинул Код:
where (( select count (*) from task, projects where projects.id=task.project_id AND task.status=1) =(select count (*) from task where projects.id=task.project_id)) или Код:
select * from Project
where Exists(select * from Task
where Project.Id=Task.ProjectId and Task.Status <> ANY
(SELECT status
FROM task,project where Project.Id=Task.ProjectId ))Последний раз редактировалось freedomman, 24.11.2011 в 10:05. |
|
#6
|
||||
|
||||
|
Что-то вы не то сделали. Там все должно быть нормально. Если хотя-бы одно из значений в задачах для проекта не выполнено, то проект не выполнен и отображается. И наоборот. Вот тестовый проектик:
Код:
create table #Project (id int, name varchar(50))
create table #Task (id int, ProjectID int, name varchar(50), Status varchar(20))
insert into #Project (id, name) values(1,'Победить всех')
insert into #Project (id, name) values(2,'Захватить власть')
insert into #Project (id, name) values(3,'Развязать войну')
insert into #Task (id, ProjectID, name, Status) values(1, 1, 'Накопить денег', 'Выполнено')
insert into #Task (id, ProjectID, name, Status) values(2, 1, 'Набрать армию', 'В процессе')
insert into #Task (id, ProjectID, name, Status) values(3, 2, 'Устроить переворот', 'В процессе')
insert into #Task (id, ProjectID, name, Status) values(4, 2, 'Захватить массмедиа', 'В процессе')
insert into #Task (id, ProjectID, name, Status) values(5, 2, 'Напечатать деньги', 'В процессе')
insert into #Task (id, ProjectID, name, Status) values(6, 3, 'Поссорится со всеми', 'В процессе')
insert into #Task (id, ProjectID, name, Status) values(7, 3, 'Захватить винный завод', 'В процессе')
select * from #Project
where Exists(select * from #Task
where #Project.Id=#Task.ProjectId and #Task.Status <> 'Выполнено')
select * from #Project
where not Exists(select * from #Task
where #Project.Id=#Task.ProjectId and #Task.Status <> 'Выполнено') |