|
| Дата |
|
USD/RUB | 90.2486 | BTC/USD | 68808.9438 |
|
|
|
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии. |
27.03.2015, 18:48
|
Start Post: MySQL сложный поиск в группах с ИЛИ
|
Ебланнед
Регистрация: 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'
а потом ещё раз проверять (для каждого банка), чтобы у этого банка _во всех_ пакетах не было тк
а ещё для каждого документа так делать надо
топорно, мягко говоря..
|
|
|
27.03.2015, 22:55
|
#12
|
автоматизирую интернеты
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
|
pokerface, ты спрашиваешь как сделать поиск в mysql, но не рассказал о структуре таблиц или об архитектуре БД.
Если структуры нет, то о каком поиске может идти речь? Сначала нужна структура/архитектура, потом поиск, потом оптимизация и тд.
Если архитектура известна, то выложи нам схему таблиц, желательно в графическом виде. В phpmyadmin есть тулса для построения схем, там и связи рисуются автоматически.
Думаю, большинство вопросов (само собой) отпадет, когда появится схема.
|
|
|
27.03.2015, 23:22
|
#13
|
xx999x
Регистрация: 20.12.2010
Сообщений: 2,215
Бабло: $473391
|
Цитата:
Сообщение от chesser
pokerface, ты спрашиваешь как сделать поиск в mysql, но не рассказал о структуре таблиц или об архитектуре БД.
Если структуры нет, то о каком поиске может идти речь? Сначала нужна структура/архитектура, потом поиск, потом оптимизация и тд.
Если архитектура известна, то выложи нам схему таблиц, желательно в графическом виде. В phpmyadmin есть тулса для построения схем, там и связи рисуются автоматически.
Думаю, большинство вопросов (само собой) отпадет, когда появится схема.
|
ты прав
но видимо ему накинули идей
__________________
я знаю стабильный курс на будущее eur/(usd+0.001) + usd/(eur+0.00101) = 0 ( )
|
|
|
28.03.2015, 05:24
|
#14
|
Ебланнед
Регистрация: 22.03.2015
Сообщений: 145
Бабло: $18300
ТС -->
|
ТС
Цитата:
Сообщение от chesser
pokerface, ты спрашиваешь как сделать поиск в mysql, но не рассказал о структуре таблиц или об архитектуре БД.
Если структуры нет, то о каком поиске может идти речь? Сначала нужна структура/архитектура, потом поиск, потом оптимизация и тд.
Если архитектура известна, то выложи нам схему таблиц, желательно в графическом виде. В phpmyadmin есть тулса для построения схем, там и связи рисуются автоматически.
Думаю, большинство вопросов (само собой) отпадет, когда появится схема.
|
структура? архитектура? PMA? што? )
в клиентах отмечаются документы 1/0 - есть/нет
всё.
банковскую таблицу я сейчас как раз проектирую под задачу эту
потому что мой вопрос был: "как его сохранить вообще в базе правильно и потом найти?"
по сути сами банки данных не несут
к банкам привязываются пакеты документов, которые они требуют от клиентов
вид этих пакетов описан в 1м сообщении
есть идея с нормальной формой и промежуточными таблицами: packets,documents
как это всё реализовать правильно и не громоздко - в этом и задача
|
|
|
28.03.2015, 06:28
|
#15
|
Ебланнед
Регистрация: 22.03.2015
Сообщений: 145
Бабло: $18300
ТС -->
|
ТС
вот условие например:
Паспорт + 2-НДФЛ + II документ + III документ
II документ:
Загран/ВУ/ИНН/СНИЛС/ОМС
III документ:
СТС (4 года)/Загран (12 мес)/ДМС/ТК
заметь, первая строка это И
но в каждом из пакетов ИЛИ - нужен хотя бы 1 документ
и это не то условие, которое надо просто в sql перевести
это я клиентом с соответствующими документам должен найти банки с подходящими условиями
Последний раз редактировалось pokerface; 28.03.2015 в 06:34.
|
|
|
28.03.2015, 06:46
|
#16
|
Ебланнед
Регистрация: 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.
|
|
|
28.03.2015, 07:38
|
#17
|
автоматизирую интернеты
Регистрация: 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), при этом оба варианта являются правильными и выбор зависит от цели оптимизации.
|
|
|
28.03.2015, 07:56
|
#18
|
Ебланнед
Регистрация: 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
|
|
|
28.03.2015, 08:08
|
#19
|
xx999x
Регистрация: 20.12.2010
Сообщений: 2,215
Бабло: $473391
|
Цитата:
Сообщение от pokerface
вообще-то я ищу решение в принципе
до packets вот допёр, но не уверен, что так оптимально
а ты мне воду льёшь
это НФ1
|
ты пока вопрос задавал, видимо что-то упомянуть забыл
ну честно, прочитал трезвый, прочитал синий - и нифига не понятно что ты там хочешь
__________________
я знаю стабильный курс на будущее eur/(usd+0.001) + usd/(eur+0.00101) = 0 ( )
|
|
|
28.03.2015, 08:14
|
#20
|
Ебланнед
Регистрация: 22.03.2015
Сообщений: 145
Бабло: $18300
ТС -->
|
ТС
Цитата:
Сообщение от x999xx
ты пока вопрос задавал, видимо что-то упомянуть забыл
ну честно, прочитал трезвый, прочитал синий - и нифига не понятно что ты там хочешь
|
ну я его задавал для простого случая, где одно правило ИЛИ
ну вот тут и ниже расписал по полной всю трагедию
|
|
|
28.03.2015, 08:39
|
#21
|
xx999x
Регистрация: 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 ( )
|
|
|
|