Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.11.2011, 15:12
freedomman freedomman вне форума
Новичок
 
Регистрация: 12.10.2011
Сообщения: 51
Репутация: 10
По умолчанию sql запрос

Уважаемые форумчане, имеется такая проблемка, недавно столкнулся с mysql, так что не совсем пойму как это делается, итак


Имеются таблица описывающая рабочие проекты в базе mysql,
каждый проект состоит из некоторых составляющих, которые находятся в другой таблице. Составляющие имеют статус: не начато, в работе, выполнено. проект считается завершенным если выполнены все его составляющие, и "в работе", если хотя бы одна составляющая не начата, либо все еще в работе. ...... как выявить исходя из составляющих какой проект выполнен, а какой нет
Ответить с цитированием
  #2  
Старый 23.11.2011, 15:15
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Отвечу в таком-же "жадном" стиле:
- Запросом к таблице на проверку статуса.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 23.11.2011, 15:29
freedomman freedomman вне форума
Новичок
 
Регистрация: 12.10.2011
Сообщения: 51
Репутация: 10
По умолчанию

чтоб было более ясно
главная таблица ('id','name');
подтаблица ('id','project_id','exec','status')

Последний раз редактировалось freedomman, 24.11.2011 в 09:54.
Ответить с цитированием
  #4  
Старый 23.11.2011, 20:24
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Тогда можно так попробовать:
Код:
-- Незаконченные проекты
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)
Status = 1 соответствует "Выполнено"
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 24.11.2011, 09:52
freedomman freedomman вне форума
Новичок
 
Регистрация: 12.10.2011
Сообщения: 51
Репутация: 10
По умолчанию

спасибо, но немного не то, выводит те проекты в котором хотя бы одно из значений таблицы 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  
Старый 24.11.2011, 15:38
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Что-то вы не то сделали. Там все должно быть нормально. Если хотя-бы одно из значений в задачах для проекта не выполнено, то проект не выполнен и отображается. И наоборот. Вот тестовый проектик:
Код:
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 <> 'Выполнено')
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:51.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025