добрый день
есть такое условие у банка, который требует документы от клиента, ему нужна 2-ндфл ИЛИ трудовая
при поиске неизвестно, чего хочет банк, банков много, просто нет трудовой у клиента например (tk=0), как выкинуть банк, который её требует в пакете условий?
как его сохранить вообще в базе правильно и потом найти?
условия могут быть такими:
1. пакет документов.
2. пакет + один из нескольких + еще один из нескольких.
3. пакет + (один ПАКЕТ ИЛИ второй ПАКЕТ ИЛИ третий пакет)если делать через отдельную таблицу, куда складывать условия-пакеты, то примерно как-то так:
bank='bank1',packet='packet1',doc1='ndfl',doc2='tk',doc3='td' (это ИЛИ)
bank='bank1',packet='packet2',doc1='pass'
bank='bank1',packet='packet3',doc1='inn'но тогда, если у клиента нет tk, то where doc1 != 'tk' AND doc2 != 'tk' AND doc3 != 'tk'
а потом ещё раз проверять (для каждого банка), чтобы у этого банка _во всех_ пакетах не было тк
а ещё для каждого документа так делать надо
топорно, мягко говоря..
>[оверквотинг удален]
> так:
> bank='bank1',packet='packet1',doc1='ndfl',doc2='tk',doc3='td' (это ИЛИ)
> bank='bank1',packet='packet2',doc1='pass'
> bank='bank1',packet='packet3',doc1='inn'
> но тогда, если у клиента нет tk, то where doc1 != 'tk'
> AND doc2 != 'tk' AND doc3 != 'tk'
> а потом ещё раз проверять (для каждого банка), чтобы у этого банка
> _во всех_ пакетах не было тк
> а ещё для каждого документа так делать надо
> топорно, мягко говоря..Таблица banks с полем packet, объединенная таблица documents с полями packet,document.
Select document from documents where packet = 'packet1' дает состав документов пакета
Select bank from banks, documents where banks.packet=documents.packet and documents.document!='tk',
Дает банки без tk в пакете
Ну тут еще важно как ты у персоны документ хранишь. Можно разделить таблицу документов на таблицу пакетов и справочник документов, но такая реляция уже громоздка.
>[оверквотинг удален]
>> AND doc2 != 'tk' AND doc3 != 'tk'
>> а потом ещё раз проверять (для каждого банка), чтобы у этого банка
>> _во всех_ пакетах не было тк
>> а ещё для каждого документа так делать надо
>> топорно, мягко говоря..
> Таблица banks с полем packet, объединенная таблица documents с полями packet,document.
> Select document from documents where packet = 'packet1' дает состав документов
> пакета
> Select bank from banks, documents where banks.packet=documents.packet and documents.document!='tk',
> Дает банки без tk в пакетеЛажа, дает развертку документов по банку, я не знаю как, извини.
> Ну тут еще важно как ты у персоны документ хранишь. Можно разделить
> таблицу документов на таблицу пакетов и справочник документов, но такая реляция
> уже громоздка.
> Ну тут еще важно как ты у персоны документ хранишьу клиента это
tk=0/1
ну ещё есть транспортное средство год выпуска например...
регион прописки
пздц в общем набор головняков
>[оверквотинг удален]
>> а ещё для каждого документа так делать надо
>> топорно, мягко говоря..
> Таблица banks с полем packet, объединенная таблица documents с полями packet,document.
> Select document from documents where packet = 'packet1' дает состав документов
> пакета
> Select bank from banks, documents where banks.packet=documents.packet and documents.document!='tk',
> Дает банки без tk в пакете
> Ну тут еще важно как ты у персоны документ хранишь. Можно разделить
> таблицу документов на таблицу пакетов и справочник документов, но такая реляция
> уже громоздка.Но прямое условие выбрать банки, требующие tk будет работать.
>[оверквотинг удален]
>> но тогда, если у клиента нет tk, то where doc1 != 'tk'
>> AND doc2 != 'tk' AND doc3 != 'tk'
>> а потом ещё раз проверять (для каждого банка), чтобы у этого банка
>> _во всех_ пакетах не было тк
>> а ещё для каждого документа так делать надо
>> топорно, мягко говоря..
> Таблица banks с полем packet, объединенная таблица documents с полями packet,document.
> Select document from documents where packet = 'packet1' дает состав документов
> пакета
> Select bank from banks, documents where banks.packet=documents.packet and documents.document!='tk',Вот я тебе написал, только != заменить на =. Этот селект из этих таблиц дает банки требующие тк
> Дает банки без tk в пакете
> Ну тут еще важно как ты у персоны документ хранишь. Можно разделить
> таблицу документов на таблицу пакетов и справочник документов, но такая реляция
> уже громоздка.
> Таблица banks с полем packet, объединенная таблица documents с полями packet,document.
> Select document from documents where packet = 'packet1' дает состав документов
> пакета
> Select bank from banks, documents where banks.packet=documents.packet and documents.document!='tk',
> Дает банки без tk в пакетевот так придётся для каждого документа делать, а их там ~20
использовать подзапросы
select bank from banks
where
bank_id not in
(select bank_id from _таблица банков требующих документ 1_)
and
bank_id not in
(select bank_id from _таблица банков требующих документ 2_)
and
bank_id not in
(select bank_id from _таблица банков требующих документ 3_)хотя все три таблицы имеет смысл привести к нормальной форме
банки:пакеты
пакеты:документы
>[оверквотинг удален]
> (select bank_id from _таблица банков требующих документ 1_)
> and
> bank_id not in
> (select bank_id from _таблица банков требующих документ 2_)
> and
> bank_id not in
> (select bank_id from _таблица банков требующих документ 3_)
> хотя все три таблицы имеет смысл привести к нормальной форме
> банки:пакеты
> пакеты:документывот условие например:
Паспорт + 2-НДФЛ + II документ + III документ
II документ:
Загран/ВУ/ИНН/СНИЛС/ОМС
III документ:
СТС (4 года)/Загран (12 мес)/ДМС/ТКзаметь, первая строка это И
но в каждом из пакетов ИЛИ - нужен хотя бы 1 документ
и это не то условие, которое надо просто в sql перевести
это я клиентом с соответствующими документам должен найти банки с подходящими условиями
по-моему оно тут не сработаеткак-то так:
разбить банк на пакеты и хранить в виде:
Паспорт
2-НДФЛ
Загран/ВУ/ИНН/СНИЛС/ОМС
СТС (4 года)/Загран (12 мес)/ДМС/ТКпотом найти те пакеты, которым удовлетворяют мои документы
и найти те банки, в которых ВСЕ их пакеты удовлетвореныtable packets:
bank packet pass ndfl zagran vu inn snils oms sts zagranT dms tk
sber 1 1 0 0 0 0 0 0 0 0 0 0
sber 2 0 1 0 0 0 0 0 0 0 0 0
sber 3 0 0 1 1 1 1 1 0 0 0 0
sber 4 0 0 0 0 0 0 0 4 12 1 1
>[оверквотинг удален]
> 1
> 1 1 1
> 1 0 0
> 0 0
> sber 4
> 0 0
> 0
> 0 0 0
> 0 4 12
> 1 1Теперь понятно, в принципе решение, только в примере паспорт и ндфл всегда 1 а, II и III документы дают 16 комбинаций, то есть 16 вариантов пакетов для сбербанка. И проверять потом придется точное совпадение строки киента со строкой пакета и единицы и нули.
> Теперь понятно, в принципе решение, только в примере паспорт и ндфл всегда
> 1 а, II и III документы дают 16 комбинаций, то есть
> 16 вариантов пакетов для сбербанка. И проверять потом придется точное совпадение
> строки киента со строкой пакета и единицы и нули.нет, как раз каждый пакет отдельно стоящий и должен совпасть строго по своему пункту(ам)