Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2012, 11:48   #1
volfmen15
Пользователь
 
Регистрация: 19.12.2011
Сообщений: 16
По умолчанию Поиск максимальной записи!

Всем здравствуйте!
У меня такая проблема, написал курсач на delphi по бд чемпионат мира по футболу, и в итоге оказалось сделал ошибку в лог. модели, т.е. весь курсач неправильный, но препод. разрешил не переписывать курсач если смогу сделать поиск результативного игрока(который забил больше всего голов) среди всех игроков в разных таблицах.

У меня всего 10 таблиц с составами игроков(во всех таблицах значения столбца ID_IGROKA одинаковые) и 10 таблиц со статистикой этих команд. Нужно найти максимально игрока среди них!

Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select ID_IGROKA, FIO, DR, AMPLUA, GOLI from anglia.dbf a, stat_igr.dbf st, argentina.dbf ar, stat_arg.dbf sta');
Query1.SQL.Add('where FIO="'+Edit5.Text+'" and');
Query1.SQL.Add('sta.GOLI=(select max(sa.GOLI) from stat_arg.dbf sa)and ar.ID_IGROKA=sta.ID_IGROKA');
Query1.SQL.Add('');


Я начал писать запрос и остановился, потому что не совсем представляю как будет осуществляться поиск!
Может кто-нибудь сможет мне хоть что-то посоветовать как это реализовать и поможет написать это!
volfmen15 вне форума Ответить с цитированием
Старый 09.02.2012, 12:55   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Молодец твой препод) Как ловко подвёл к вопросу - а зачем было создавать 2*10 одинаковых таблиц) проще было в одной добавить поле с принадлежностью игрока к определённой команде.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 09.02.2012, 13:34   #3
volfmen15
Пользователь
 
Регистрация: 19.12.2011
Сообщений: 16
По умолчанию

просто нужно было что бы получилось больше сущностей поэтому пришлось создавать 2 разных таблицы, но я протупил и создал 20)) вот и сижу теперь парюсь!
volfmen15 вне форума Ответить с цитированием
Старый 09.02.2012, 14:49   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

По одной сборной можешь найти лучшего забивальщика? Объедини с помощью UNION такие запросы для всех сборных и выдерни лучшего из объединенного подзапроса. Не помню только даст ли BDE такой изврат совершить над кучей dbf
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.02.2012, 14:56   #5
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
По одной сборной можешь найти лучшего забивальщика? Объедини с помощью UNION такие запросы для всех сборных и выдерни лучшего из объединенного подзапроса. Не помню только даст ли BDE такой изврат совершить над кучей dbf
Я как-то пробовал - не получилось) но можно пойти другим, извращённым, путём: сделать отдельную временную табличку по лучшим бомбардирам (через вышеописанный вариант с кучей Union) и сделать в ней отдельную выборку.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 09.02.2012, 15:01   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Что не получилось? Выложи структуру таблиц сюда и запрос для определения лучшего в одной команде и то что пробовал делать с UNION
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.02.2012, 15:26   #7
volfmen15
Пользователь
 
Регистрация: 19.12.2011
Сообщений: 16
По умолчанию


Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select a.FIO, st.GOLI from anglia.dbf a, stat_igr.dbf st where st.GOLI=(select max(s.GOLI) from stat_igr.dbf s)and a.ID_IGROKA=st.ID_IGROKA');
Query1.Open;


Вот поиск лучшего игрока в сборной Англии и еще есть для 9 других стран, а нужно чтобы искал одного игрока среди всех таблиц! Получается 10 таблиц с составом имеют одинаковые поля: ID_IGROKA, FIO, DR, AMPLUA И так же для каждой из этих таблиц есть таблица со статистикой игроков(в ней описано кол-во сыгранных игор игроком и забитые голы): ID_IGROKA, KOL_IGOR, GOLI Связаны они по ID_IGROKA

Аватар, я не знаю как пользоваться этими UNION, приведи пример хотя бы пожалуйста!
volfmen15 вне форума Ответить с цитированием
Старый 09.02.2012, 15:56   #8
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
я не знаю как пользоваться этими UNION, приведи пример хотя бы пожалуйста!
Код:
Select A, B from basa_1 where A>100
union
Select A, B from basa_2 where B<300
union
....
union
Select A, B from basa_n
работает примерно так. главное, чтобы поля в выборке были идентичны иначе будут косяки.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 09.02.2012, 15:57   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Попробуй, только учти, не отлаживал
Код:
SELECT V.FIO,V.GOLI
  FROM (
    SELECT a.FIO,s.GOLI FROM anglia.dbf a,stat_igr.dbf s WHERE a.ID_IGROKA=s.ID_IGROKA
    UNION
    ...
    UNION
    SELECT a.FIO,s.GOLI FROM argentina.dbf a,stat_arg.dbf s WHERE a.ID_IGROKA=s.ID_IGROKA) V
  WHERE V.GOLI=(
    SELECT MAX(T.GOLI)
    FROM
      (SELECT GOLI FROM stat_igr.dbf
       UNION
       ...
       UNION
       SELECT GOLI FROM stat_arg.dbf) T)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 09.02.2012 в 16:06.
Аватар вне форума Ответить с цитированием
Старый 09.02.2012, 17:47   #10
volfmen15
Пользователь
 
Регистрация: 19.12.2011
Сообщений: 16
По умолчанию

набрал код, запустил, по нажатию на кнопку выдает ошибку:

project1 вызвал исключение класса EDBEngineError с сообщ. "Invalid use of keyword"
Token: select
Line Number2



Вот какой код получился:

Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select v.FIO, v.GOLI from');
Query1.SQL.Add('(select a.FIO, st.GOLI from anglia.dbf a,stat_igr.dbf st where a.ID_IGROKA=st.ID_IGROKA union');
Query1.SQL.Add('select ar.FIO, sta.GOLI from argentina.dbf ar,stat_arg.dbf sta where ar.ID_IGROKA=sta.ID_IGROKA union');
Query1.SQL.Add('select ger.FIO, stg.GOLI from germania.dbf ger,stat_ger.dbf stg where ger.ID_IGROKA=stg.ID_IGROKA union');
Query1.SQL.Add('select fr.FIO, stf.GOLI from franz.dbf fr,stat_fr.dbf stf where fr.ID_IGROKA=stf.ID_IGROKA union');
Query1.SQL.Add('select isp.FIO, stis.GOLI from ispania.dbf isp,stat_isp.dbf stis where isp.ID_IGROKA=stis.ID_IGROKA union');
Query1.SQL.Add('select it.FIO, stit.GOLI from italia.dbf it,stat_ita.dbf stit where it.ID_IGROKA=stit.ID_IGROKA union');
Query1.SQL.Add('select m.FIO, stm.GOLI from mexika.dbf m,stat_mex.dbf stm where m.ID_IGROKA=stm.ID_IGROKA union');
Query1.SQL.Add('select pa.FIO, stpa.GOLI from paragvay.dbf pa,stat_par.dbf stpa where pa.ID_IGROKA=stpa.ID_IGROKA union');
Query1.SQL.Add('select por.FIO, stpo.GOLI from portugal.dbf por,stat_por.dbf stpo where por.ID_IGROKA=stpo.ID_IGROKA union');
Query1.SQL.Add('select sc.FIO, stsc.GOLI from schweizer.dbf sc,stat_sch.dbf stsc where sc.ID_IGROKA=stsc.ID_IGROKA) v');
Query1.SQL.Add('where v.GOLI=(select max(t.GOLI) from');
Query1.SQL.Add('(select GOLI from stat_igr.dbf union');
Query1.SQL.Add('select GOLI from stat_arg.dbf union');
Query1.SQL.Add('select GOLI from stat_ger.dbf union');
Query1.SQL.Add('select GOLI from stat_fr.dbf union');
Query1.SQL.Add('select GOLI from stat_isp.dbf union');
Query1.SQL.Add('select GOLI from stat_ita.dbf union');
Query1.SQL.Add('select GOLI from stat_mex.dbf union');
Query1.SQL.Add('select GOLI from stat_par.dbf union');
Query1.SQL.Add('select GOLI from stat_por.dbf union');
Query1.SQL.Add('select GOLI from stat_sch.dbf)t)');
Query1.Open;

Последний раз редактировалось volfmen15; 09.02.2012 в 18:05.
volfmen15 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В квадратной матрице найти столбец с максимальной суммой и строку с максимальной суммой (Pascal) Alexey355 Помощь студентам 1 26.03.2011 14:06
Выполнить поиск записи в форме Познающий Microsoft Office Access 6 08.06.2010 19:09
Поиск записи в поле со списком Swatch Microsoft Office Access 1 23.12.2009 19:09
поиск записи после обновления smoky Microsoft Office Access 1 12.05.2009 00:20
Поиск последней записи в определенной строке Maxx Microsoft Office Excel 5 04.03.2009 14:01