MySQL сложный поиск в группах с ИЛИ - Форум успешных вебмастеров - GoFuckBiz.com - Страница 5
 
 
Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB90.2486
BTC/USD69062.4541
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 27.03.2015, 18:48
Start Post: MySQL сложный поиск в группах с ИЛИ 
  #41
pokerface
Ебланнед
 
Регистрация: 22.03.2015
Сообщений: 145
Бабло: $18300
По умолчанию

есть такое условие у банка, который требует документы от клиента, ему нужна 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'
а потом ещё раз проверять (для каждого банка), чтобы у этого банка _во всех_ пакетах не было тк
а ещё для каждого документа так делать надо
топорно, мягко говоря..
pokerface вне форума  
Старый 28.03.2015, 14:46   #42
pokerface
Ебланнед
 
Регистрация: 22.03.2015
Сообщений: 145
Бабло: $18300
ТС -->
автор темы ТС По умолчанию

Цитата:
Сообщение от xanxy
Подумай над вариантом вести все сочетания доков
дохлый вариант
pokerface вне форума  
Старый 28.03.2015, 15:20   #43
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
По умолчанию

Цитата:
Сообщение от pokerface
если у тебя выкинуть package из запроса, как ты говоришь, то получится так?
doc (id,package,name)
из запроса выкинуть package можно, но денормализовывать БД не вижу смысла, от этого будет только хуже.
у тебя 3 отдельные сущности, которые имеют между собой зависимости много-ко-многим. Упрощение и сокращение количества таблиц усложнит условия поиска.

Цитата:
Сообщение от xanxy
Хотя я бы док привязал к пакету, а не к банку. А пакет уже к банку. Но это получится лишний JOIN в некоторых запросах.
а разницы нет, что так, что так, потому что в БКНФ нужно выбрать какая функциональная зависимость будет первичной, какая вторичной.

если делать 3НФ, то будет еще проще:

relations (bank_id, package_id, doc_id)

таблица, хранящая сочетания всех 3х сущностей.

Цитата:
Сообщение от pokerface
хотя все три таблицы имеет смысл привести к нормальной форме
вот и я про это

Цитата:
Сообщение от pokerface
банки:пакеты
пакеты:документы
БКНФ

Цитата:
Сообщение от pokerface
хотя бы банк:пакет:документ
3НФ
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума  
Старый 29.03.2015, 06:20   #44
pokerface
Ебланнед
 
Регистрация: 22.03.2015
Сообщений: 145
Бабло: $18300
ТС -->
автор темы ТС По умолчанию

итаг, в сухом остатке:
Цитата:
Паспорт + 2-НДФЛ + II документ + III документ
II документ:
Загран/ВУ/ИНН/СНИЛС/ОМС
III документ:
СТС (4 года)/Загран (12 мес)/ДМС/ТК
в БД разбивается по пакетам так:
packet1 Паспорт
packet2 2-НДФЛ
packet3 II документ (набор документов через ИЛИ)
packet4 III документ

далее я подставляю в WHERE все документы клиента через OR и нахожу пакеты, где совпало
из этих пакетов беру банки и для каждого собираю общее кол-во пакетов, которые ему нужны (в примере выше это 4 пакета, а если клиент удовлетворил только 3, то мимо)
как-то так
получается 1 SELECT в пакеты + 1 SELECT в банки + всё остальное в скрипте
можно тут ещё что-то оптимизировать?
pokerface вне форума