![]() |
|
#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 <> 'Выполнено') Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |