Показать сообщение отдельно
  #2  
Старый 01.04.2010, 06:11
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,111
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Тебе нужна БД. В принципе, можно обойтись, но с БД будет проще.
В БД будет 2 таблички. Первая [PEOPLE] - список группы, состоит из 2х полей: ID (идннтификатор, целое, автоинкремент) и Name (имя студента, строковое). Вторая табличка [GUEST_LOG] будет тоже из 2х полей. В ней будем хранить информацию о том, кто у кого побывал в гостях. Она тоже состоит из 2х полей: HOLDER_ID (целое, ссылка на студента-хозяина) и GUEST_ID (целое, ссылка на студента-гостя) /ссылки указывают на поле ID из первой таблицы/.

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

Что значит в нашей архитектуре, что человек побывал у всех в гостях? Это значит, что во второй таблице для него как GUIST_ID будет N записей. При этом, N будет равно кол-ву студентов группы (т.е. кол-ву записей в первой табличке) минус 1 (сам у себя в гостях не побываешь).
Соотвсетсвенно, можно сделать такой запрос:
Код:
SELECT P.NAME, COUNT(P.ID) FROM PEOPLE P LEFT JOIN GUEST_LOG G ON P.ID = G.GUEST_ID
GROUP BY P.NAME
Получим список студентов с кол-вом гостевых визитов. А теперь осталось сравнить это кол-во с общим числом студентов и оствить список.

ЗЫ. Это можно сделать одним запросом, но для новичка будет слишком сложно.

ЗЗЫ. То же самое можно легко сделать и без БД, но писать придется больше.

ЗЗЗЫ. Хочешь готовую программу - велкам в раздел "Работа".
Ответить с цитированием