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

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

Закрытая тема
Опции темы Опции просмотра
Старый 27.03.2015, 18:48
Start Post: MySQL сложный поиск в группах с ИЛИ 
  #11
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 вне форума  
Старый 27.03.2015, 22:55   #12
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
По умолчанию

pokerface, ты спрашиваешь как сделать поиск в mysql, но не рассказал о структуре таблиц или об архитектуре БД.

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

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

Думаю, большинство вопросов (само собой) отпадет, когда появится схема.
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума  
Старый 27.03.2015, 23:22   #13
x999xx
xx999x
 
Аватар для x999xx
 
Регистрация: 20.12.2010
Сообщений: 2,215
Бабло: $473391
По умолчанию

Цитата:
Сообщение от chesser Посмотреть сообщение
pokerface, ты спрашиваешь как сделать поиск в mysql, но не рассказал о структуре таблиц или об архитектуре БД.

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

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

Думаю, большинство вопросов (само собой) отпадет, когда появится схема.
ты прав
но видимо ему накинули идей
__________________
я знаю стабильный курс на будущее eur/(usd+0.001) + usd/(eur+0.00101) = 0 ( )
x999xx вне форума  
Старый 28.03.2015, 05:24   #14
pokerface
Ебланнед
 
Регистрация: 22.03.2015
Сообщений: 145
Бабло: $18300
ТС -->
автор темы ТС По умолчанию

Цитата:
Сообщение от chesser Посмотреть сообщение
pokerface, ты спрашиваешь как сделать поиск в mysql, но не рассказал о структуре таблиц или об архитектуре БД.

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

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

Думаю, большинство вопросов (само собой) отпадет, когда появится схема.
структура? архитектура? PMA? што? )
в клиентах отмечаются документы 1/0 - есть/нет
всё.
банковскую таблицу я сейчас как раз проектирую под задачу эту
потому что мой вопрос был: "как его сохранить вообще в базе правильно и потом найти?"
по сути сами банки данных не несут
к банкам привязываются пакеты документов, которые они требуют от клиентов
вид этих пакетов описан в 1м сообщении
есть идея с нормальной формой и промежуточными таблицами: packets,documents
как это всё реализовать правильно и не громоздко - в этом и задача
pokerface вне форума  
Старый 28.03.2015, 06:28   #15
pokerface
Ебланнед
 
Регистрация: 22.03.2015
Сообщений: 145
Бабло: $18300
ТС -->
автор темы ТС По умолчанию

вот условие например:
Паспорт + 2-НДФЛ + II документ + III документ
II документ:
Загран/ВУ/ИНН/СНИЛС/ОМС
III документ:
СТС (4 года)/Загран (12 мес)/ДМС/ТК

заметь, первая строка это И
но в каждом из пакетов ИЛИ - нужен хотя бы 1 документ
и это не то условие, которое надо просто в sql перевести
это я клиентом с соответствующими документам должен найти банки с подходящими условиями

Последний раз редактировалось pokerface; 28.03.2015 в 06:34.
pokerface вне форума  
Старый 28.03.2015, 06:46   #16
pokerface
Ебланнед
 
Регистрация: 22.03.2015
Сообщений: 145
Бабло: $18300
ТС -->
автор темы ТС По умолчанию

как-то так:
разбить банк на пакеты и хранить в виде:
Паспорт
2-НДФЛ
Загран/ВУ/ИНН/СНИЛС/ОМС
СТС (4 года)/Загран (12 мес)/ДМС/ТК

потом найти те пакеты, которым удовлетворяют мои документы
и найти те банки, в которых ВСЕ их пакеты удовлетворены

Код:
table packets:
bank packet pass ndfl zagran vu inn snils oms sts zagranT dms tk
sber   1      1    1     0    0  0    0    0   0     0     0   0
sber   2      1    0     1    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

Последний раз редактировалось pokerface; 28.03.2015 в 06:57.
pokerface вне форума  
Старый 28.03.2015, 07:38   #17
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
По умолчанию

Цитата:
Сообщение от pokerface
правильно и не громоздко
так не бывает

ты мучаешься в поисках той нормальной формы БД, которая тебя бы устроила. Но выбор НФ зависит не столько от структуры БД/данных, сколько от степени оптимизации тех или иных запросов. Обычно в классика - это хранить данные в 3-ей нормальной форме (или БКНФ), а для оптимизации(ускорения) запросов есть механизмы перевода данных в 2НФ(или БКНФ->НФ), что по сути и есть механизм кеширования. Чем меньше НФ, тем проще "на вид" запросы, работают они быстрее при достаточном количестве памяти, хранение данных дороже и наоборот: чем выше НФ, тем памяти требется меньше, структура запросов сложнее, работает медленнее, хранение данных дешевле.

если делать БКНФ, то будут следующие таблицы справочников:

bank (id, name)
package (id, name)
doc (id, name)

и таблицы связей:
package_doc (id, package_id, doc_id)
bank_package (id, bank_id, package_doc_id)

отличие БКНФ от 3НФ, в том что по 3НФ вместо последних 2-ух таблиц будет одна relations(id, bank_id, package_id, doc_id), при этом оба варианта являются правильными и выбор зависит от цели оптимизации.
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума  
Старый 28.03.2015, 07:56   #18
pokerface
Ебланнед
 
Регистрация: 22.03.2015
Сообщений: 145
Бабло: $18300
ТС -->
автор темы ТС По умолчанию

Цитата:
Сообщение от chesser Посмотреть сообщение
ты мучаешься в поисках той нормальной формы БД, которая тебя бы устроила.
вообще-то я ищу решение в принципе
до packets вот допёр, но не уверен, что так оптимально
а ты мне воду льёшь


Цитата:
Сообщение от chesser Посмотреть сообщение
если делать БКНФ, то будут следующие таблицы справочников:

bank (id, name)
package (id, name)
doc (id, name)

и таблицы связей:
package_doc (id, package_id, doc_id)
bank_package (id, bank_id, package_doc_id)
это НФ1
pokerface вне форума  
Старый 28.03.2015, 08:08   #19
x999xx
xx999x
 
Аватар для x999xx
 
Регистрация: 20.12.2010
Сообщений: 2,215
Бабло: $473391
По умолчанию

Цитата:
Сообщение от pokerface Посмотреть сообщение
вообще-то я ищу решение в принципе
до packets вот допёр, но не уверен, что так оптимально
а ты мне воду льёшь




это НФ1
ты пока вопрос задавал, видимо что-то упомянуть забыл
ну честно, прочитал трезвый, прочитал синий - и нифига не понятно что ты там хочешь
__________________
я знаю стабильный курс на будущее eur/(usd+0.001) + usd/(eur+0.00101) = 0 ( )
x999xx вне форума  
Старый 28.03.2015, 08:14   #20
pokerface
Ебланнед
 
Регистрация: 22.03.2015
Сообщений: 145
Бабло: $18300
ТС -->
автор темы ТС По умолчанию

Цитата:
Сообщение от x999xx Посмотреть сообщение
ты пока вопрос задавал, видимо что-то упомянуть забыл
ну честно, прочитал трезвый, прочитал синий - и нифига не понятно что ты там хочешь
ну я его задавал для простого случая, где одно правило ИЛИ
ну вот тут и ниже расписал по полной всю трагедию
pokerface вне форума  
Старый 28.03.2015, 08:39   #21
x999xx
xx999x
 
Аватар для x999xx
 
Регистрация: 20.12.2010
Сообщений: 2,215
Бабло: $473391
По умолчанию

Цитата:
Сообщение от pokerface Посмотреть сообщение
вот условие например:
Паспорт + 2-НДФЛ + II документ + III документ
II документ:
Загран/ВУ/ИНН/СНИЛС/ОМС
III документ:
СТС (4 года)/Загран (12 мес)/ДМС/ТК

заметь, первая строка это И
но в каждом из пакетов ИЛИ - нужен хотя бы 1 документ
и это не то условие, которое надо просто в sql перевести
это я клиентом с соответствующими документам должен найти банки с подходящими условиями
ну а в каком поле у тебя документы храняться? допустим для каждого документа у нас своя ячейка 1 или 0

select * from banks where ( (passport=1) and (2ndfl=1) and ( (Загран=1) or (ВУ=1) or (1=ИНН) or (1=СНИЛС) or (1=ОМС) ) and [третий док также] ) limit 1000500


имхо както так тогда

однако во время написания поста мне напросилась в мысли конструкция типа

where doc in ('ndfl','passport'...)

1 и 1 и 0 = 0
1 и 1 и 1 = 1
1 или 0 или 0 или 1 = 1

матлогика же
__________________
я знаю стабильный курс на будущее eur/(usd+0.001) + usd/(eur+0.00101) = 0 ( )
x999xx вне форума