MySQL сложный поиск в группах с ИЛИ , greenwar, 27-Мрт-15, 15:57 [смотреть все]добрый день есть такое условие у банка, который требует документы от клиента, ему нужна 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' а потом ещё раз проверять (для каждого банка), чтобы у этого банка _во всех_ пакетах не было тк а ещё для каждого документа так делать надо топорно, мягко говоря..
|
- MySQL сложный поиск в группах с ИЛИ , Павел Самсонов, 16:55 , 27-Мрт-15 (1)
>[оверквотинг удален] > так: > 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 в пакете Ну тут еще важно как ты у персоны документ хранишь. Можно разделить таблицу документов на таблицу пакетов и справочник документов, но такая реляция уже громоздка.
- MySQL сложный поиск в группах с ИЛИ , Павел Самсонов, 17:00 , 27-Мрт-15 (2)
>[оверквотинг удален] >> 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 в пакете Лажа, дает развертку документов по банку, я не знаю как, извини. > Ну тут еще важно как ты у персоны документ хранишь. Можно разделить > таблицу документов на таблицу пакетов и справочник документов, но такая реляция > уже громоздка. - MySQL сложный поиск в группах с ИЛИ , greenwar, 17:03 , 27-Мрт-15 (3)
> Ну тут еще важно как ты у персоны документ хранишьу клиента это tk=0/1 ну ещё есть транспортное средство год выпуска например... регион прописки пздц в общем набор головняков
- MySQL сложный поиск в группах с ИЛИ , Павел Самсонов, 17:06 , 27-Мрт-15 (4)
>[оверквотинг удален] >> а ещё для каждого документа так делать надо >> топорно, мягко говоря.. > Таблица 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 будет работать.
- MySQL сложный поиск в группах с ИЛИ , Павел Самсонов, 17:13 , 27-Мрт-15 (5)
>[оверквотинг удален] >> но тогда, если у клиента нет 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 в пакете > Ну тут еще важно как ты у персоны документ хранишь. Можно разделить > таблицу документов на таблицу пакетов и справочник документов, но такая реляция > уже громоздка. - MySQL сложный поиск в группах с ИЛИ , greenwar, 17:53 , 27-Мрт-15 (7)
> Таблица 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
- MySQL сложный поиск в группах с ИЛИ , name, 17:52 , 27-Мрт-15 (6)
использовать подзапросы 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_)хотя все три таблицы имеет смысл привести к нормальной форме банки:пакеты пакеты:документы
- MySQL сложный поиск в группах с ИЛИ , greenwar, 05:30 , 28-Мрт-15 (8)
>[оверквотинг удален] > (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
- MySQL сложный поиск в группах с ИЛИ , Павел Самсонов, 18:00 , 29-Мрт-15 (9)
>[оверквотинг удален] > 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 вариантов пакетов для сбербанка. И проверять потом придется точное совпадение строки киента со строкой пакета и единицы и нули.
- MySQL сложный поиск в группах с ИЛИ , greenwar, 07:41 , 30-Мрт-15 (10)
> Теперь понятно, в принципе решение, только в примере паспорт и ндфл всегда > 1 а, II и III документы дают 16 комбинаций, то есть > 16 вариантов пакетов для сбербанка. И проверять потом придется точное совпадение > строки киента со строкой пакета и единицы и нули.нет, как раз каждый пакет отдельно стоящий и должен совпасть строго по своему пункту(ам)
|