The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
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 вариантов пакетов для сбербанка. И проверять потом придется точное совпадение
          > строки киента со строкой пакета и единицы и нули.

          нет, как раз каждый пакет отдельно стоящий и должен совпасть строго по своему пункту(ам)




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру