powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / помогите сделать представление
25 сообщений из 25, страница 1 из 1
помогите сделать представление
    #33067792
k_sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Очень хотелось бы сделать представление из 2-х таблиц с отношением 1 ко многим, но из подчиненной таблицы нужно брать запись с максимальной датой.
Таблица k_job: sh_job , prof. Подчиненная таблица Tar_job: sh_job, data, tarif.

Можно это сделать одним запросом?
...
Рейтинг: 0 / 0
помогите сделать представление
    #33067806
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
OPEN DATEBASES <DataBaseName>
CREATE SQL VIEW lvLastDate as ;
   SELECT sh_job, MAX(data) data ;
   FROM Tar_job ;
   GROUP BY sh_job
...
Рейтинг: 0 / 0
помогите сделать представление
    #33067921
k_sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, получилось.
Я новичек в VFoxPro, поэтому заранее прошу прощения за глупые вопросы.
...
Рейтинг: 0 / 0
помогите сделать представление
    #33072744
k_sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Простите, не получилось.
Дата то берется максимальная, а тариф какой попало. А надо тариф брать из той записи, где дата максимальная.
...
Рейтинг: 0 / 0
помогите сделать представление
    #33072813
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
такая вот .... байда
OPEN DATEBASES <DataBaseName>
CREATE SQL VIEW lvLastDate as ;
select k_job.sh_job,k_job.prof,Tar_job.data,Tar_job.tarif from k_job left join Tar_job on Tar_job.sh_job=k_job.sh_job where str(k_job.sh_job,6)+dtos(Tar_job.data) in (select max(str(k_job.sh_job,6)+dtos(Tar_job.data)) from Tar_job group by k_job.sh_job)

правда не проверял так что за базар не отвечаю
...
Рейтинг: 0 / 0
помогите сделать представление
    #33072961
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
select a.sh_job, a.prof, b.data, b.tarif ;
from k_job as a ;
       inner join tar_job as b on a.sh_job == b.sh_job ;
where b.data = ;
     (select max(c.data) from tar_job as c where c.sh_job = b.sh_job)
...
Рейтинг: 0 / 0
помогите сделать представление
    #33072979
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Анатолий Широков
счастливый и беззаботный обладатель девятки или я не прав ?
...
Рейтинг: 0 / 0
помогите сделать представление
    #33073020
k_sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я тут недавно и ваших приколов не знаю. Но что-то похожее на правду.
Пока спасибо.
...
Рейтинг: 0 / 0
помогите сделать представление
    #33073043
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 leaf

Отчего же и на 5-ке этот запрос идет.
...
Рейтинг: 0 / 0
помогите сделать представление
    #33073081
k_sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я тут недавно и ваших приколов не знаю. Но что-то похожее на правду.
Пока спасибо.
...
Рейтинг: 0 / 0
помогите сделать представление
    #33073376
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Маленькое уточнение.

Приведенные примеры будут работать корректно только в случае если нет нескольких записей с максимальным значением даты для одного и того же значение sh_job. В противном случае будут выбраны из подчиненной таблицы все записи с этим максимальным значением.

Впрочем, возможно, именно это и надо.
...
Рейтинг: 0 / 0
помогите сделать представление
    #33073469
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Анатолий!

Идти то идёт, но медленно - а вот в 9-ке улучшили движок, и теперь такие запросы реально оптимизируются - т.е. НЕ происходит тупого исполнения подзапроса на каждую запись основного запроса. По сути он преобразуется в хитрый JOIN...

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
помогите сделать представление
    #33074004
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Igor Korolyov
да согласен примерно это я и имел ввиду
2ВладимирМ
формально Вы как всегда правы , но фактически это будет свидетельствовать о некорректной работе программиста. Почему? Ответ - нормализация .
...
Рейтинг: 0 / 0
помогите сделать представление
    #33074111
k_sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще раз простите за безграмотность.
Что значит нормализация? Это не давать на один шифр вводить одинаковые даты? Но у меня так оно и предполагается.
Или что-то еще?
...
Рейтинг: 0 / 0
помогите сделать представление
    #33074173
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть несколько принципов нормализации реляционных таблиц большинство из них не только бесполезны но даже в некоторых случаях вредны , типа как пиво по утрам
Так вот один из них не помню какай по счету говорит об однозначности связи между таблицами (моё вольное изложение) и там дальше
Короче если у Вас на одну дату две тарифные ставки Вам нужно ввести еще какой-то доплнительный признак время например вместо даты. Иначе будет бардак и несоответсвие.
Но к счастью у вас не так. Я рад что я в Вас не ошибся
...
Рейтинг: 0 / 0
помогите сделать представление
    #33074181
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Грубо говоря, в таблице не должно быть двух одинаковых записей
...
Рейтинг: 0 / 0
помогите сделать представление
    #33074218
k_sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И на этом спасибо.
...
Рейтинг: 0 / 0
помогите сделать представление
    #33074229
k_sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И на этом спасибо.
...
Рейтинг: 0 / 0
помогите сделать представление
    #33074337
k_sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как посоветуете организовать эту самую нормализацию?
...
Рейтинг: 0 / 0
помогите сделать представление
    #33074718
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
k_svА как посоветуете организовать эту самую нормализацию?
Нормализация - это идеология. Примерно такая же как Объектоно-ориентированное программирование (ООП). Поэтому "организовать" ее невозможно.

Если опустить все высокоумные термины, то идея нормализации заключается в том, что любые данные должны вводиться только один раз и храниться только в одном месте.

Ну, например, в твоем случае нужна информация по 3 критериям: дата, работа, тариф.

Можно вводить это все в одной таблице (как, например в листе EXCEL), но такая таблица будет НЕ нормализована именно потому, что одно и то же значение ты вынужден будешь вводить несколько раз. Много раз вводить одну и ту же "работу", много раз вводить один и тот же "тариф".

Под "нормализацией" в данном случае понимается разделение информации по таблицам таким образом, чтобы отпала необходимость ввода повторяющихся значений. (есть еще "логическая" нормализация, но это более глубокие "дебри")

Это значит, что надо организовать отдельный справочник "работ" и отдельный справочник "тарифов". А в сводной таблице ты будет выбирать ранее введенную "работу" и ранее введенный "тариф".

Но идея "нормализации", как впрочем и любая другая идея, не выдерживает грубой действительности. В том смысле, что нельзя доводить идею до ее логического завершения. Это будет полнейшая бессмыслица. В данном случае ты ведь вынужден вводить повторяющиеся даты, но создавать отдельный справочник "даты" никому и в голову не придет.

Т.е., как правило, нормализация базы данных выполняется до некоего предела, глубже которого "не копают". В этом просто нет смысла. Иногда сознательно нарушают правила нормализации, для повышения быстродействия системы. Но такие отступления требуют более тщательного программирования.
...
Рейтинг: 0 / 0
помогите сделать представление
    #33074724
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
о это долгий рассказ и не для форума
1.купите книгу по теории баз данных
2.посмотрите практически любую книгу по базам данных они с этого начинаются обычно
3. спросите у ВладимираМ ссылочку может даст если завалялась , у меня такой нет
...
Рейтинг: 0 / 0
помогите сделать представление
    #33074800
k_sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот к чему приводят некорректно поставленные вопросы. :((
Я совсем другое хотела спросить.
Как нормальные люди это делают: навешивают процедуры на триггеры или правила таблиц (честно говоря, я там особо еще не копалась), либо прямо в форме при вводе записи делать эти проверки?
...
Рейтинг: 0 / 0
помогите сделать представление
    #33074836
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну нормальные понятие относительное особенно программисты
я например контролирую уникальность по ходу но это не всем нравиться
кто-то ставит индексы уникальные которые соответственно ругаются и сопративляются дубляжу
кто-то тригера использует

по моим наблюдениям индекс чаще используют

отсюда проблема генерации нового ИД - отдельный вопрос
так что лучше для начала чего-нибудь почитать
...
Рейтинг: 0 / 0
помогите сделать представление
    #33074891
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
k_svКак нормальные люди это делают: навешивают процедуры на триггеры или правила таблиц (честно говоря, я там особо еще не копалась), либо прямо в форме при вводе записи делать эти проверки?
В смысле: как организовать контроль уникальности введенных данных?

Контроль на уровне ввода данных - это всегда рекомендательный и не окончательный контроль. Он не обеспечивает реальный контроль, поскольку, по сути, каждый пользователь работает со своей копией данных.

А вот контроль на уровне записи данных - это уже окончательный контроль, поскольку он проверят именно исходные данные, а не их копии у пользователей.

Организовать его можно 2 принципиальными способами:

Индекс типа Candidat с FOR-условием (надо отсекать записи, помеченные как удаленные)

Триггер, при наличии структурного индекса по изменяемому полю и записи данных в окружении транзакции.

Первый вариант проще в реализации. Второй - универсальнее.
Первый вариант также контролирует и процесс ввода данных. Второй - только процесс записи данных.
Первый вариант несколько "избыточен" по объему занимаемого места (физически больше места на диске занимает)
...
Рейтинг: 0 / 0
помогите сделать представление
    #33074918
k_sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за советы.
Книжки я все-таки пытаюсь читать. Тут на меня одну навесили конкретную задачу. Не успеваю. Хочется и побыстрее, и чтобы не стыдно было потомкам оставить. Да и на наших программистов никакой надежды. Поэтому вся надежда на ваш сайт.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / помогите сделать представление
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]