![]() |
|
Модераторы: skyboy |
![]()
|
|
| PriZraK |
|
||||||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 22.10.2006 Репутация: нет Всего: нет |
Здравствуйте.
Работаю с биллинговой системой в которую каждый день добавляются новые клиенты. Существуют несколько роутеров, работающих с клиентами, среди них присутствует роутер условно называемый ZERO, на котором трафик не считается. Не редки случаи, когда менеджер при занесении клиента выбирает для него данный роутер, чем лишает возможности считать трафик клиента. Это лишь единственная возможная человеческая ошибка, к сожалению присутствуют и другие. Необходимо в таблице, отвечающий за хранение параметров клиента, найти все возможные ошибки менеджеров. Думаю лучше всего делать их на основе правил невалидных связок, то есть если найдена связка:
то выводить клиентов с ошибками, но тут же необходимо указать исключения, допустим:
позволит выбрать все ошибки, исключая клиента Иванова Ивана Иваныча. Упрощённая таблица:
Исходя из рассуждения, пишем запрос:
Следуя этим правилам, запрос к БД вернёт строки:
Возникает вопрос: как сконструировать запрос, чтоб по правилам B=2, C=3 и A!=2, B=2, C=3 выводился бы ответ:
Это сообщение отредактировал(а) PriZraK - 12.5.2010, 03:25 |
||||||||||||
|
|||||||||||||
| Deniz |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 6 Всего: 44 |
-------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
||||
|
|||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
Ну очень невнятное описание...
Но если сравнить строки: (B=2 AND C=3) OR (A!=2 AND B=2 AND C=3) B=2, C=3 и A!=2, B=2, C=3 то как бы очевидно, что в первой стоИт OR, а во второй AND. Добавлено через 1 минуту и 26 секунд Я уж не говорю о том, что если поставить AND - то первую группу условий можно смело удалять - что собсно и предлагает Deniz. Ну так... просто исходя из правил логической арифметики... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| PriZraK |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 22.10.2006 Репутация: нет Всего: нет |
Конечно, данный код, решит именно данную проблему. Не проблема написать SQL-запрос подогнав его под необходимый вывод. Проблема в том, что необходимо имея запрос (B=2 AND C=3) – то есть тот, который найдет ошибку, тут же давать исключения из этого результата (A!=2 AND B=2 AND C=3). Конечно вы можете предложить вариант, когда запрос сначала удалит все исключения, а по оставшемся найдет ошибки. Но в моей ситуации этого сделать нельзя. Немного подробнее об проблеме: Есть таблица с клиентами и их параметрами (биллинг) и есть таблица с не валидными связками (надстройка над биллингом), в которой собственно и описываются все возможные ошибки и их исключения. Так как же объединить запрос, который сможет по извлечённым данным из таблицы с исключениями и ошибками, выбрать в таблице биллинга ошибки, не показывая исключение из правил невалидных связок. По сути, запрос должен быть примерно таким –
|
||||||||
|
|||||||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 6 Всего: 44 |
PriZraK, все равно не понятно.
Приведи реальные таблицы (только необходимые поля) и несколько строчек примера по ним. Может пример Akina чем-то поможет. -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| PriZraK |
|
||||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 22.10.2006 Репутация: нет Всего: нет |
В данный момент запрос выглядит следующим образом (Oracle):
* прошу извинить за кучу вложенных селектов, уже достаточно раз менял конструкцию запроса в поисках работающего решения.
Таблица bil.v_connect_detail (только задействованные в запросе поля): * таблица с списком подключений
Таблица dir.users (только задействованные в запросе поля): * таблица с клиентами компании
Таблица bil.connect_tarifs_hist (только задействованные в запросе поля): * история тарифных планов; кто, когда сменил тарифный план.
Далее приведу таблицу БД настройки над биллингом (MySQL), в которой собственно содержаться одновременно и исключения и невалидные связки: rule1 – rule6 — правило; значения: 0 - не применяется; 1 – равно; 2 – не равно filter1 — ID тарифного плана filter2 — ID клиента; при -1 не применяется filter3 — ID типа клиента; при -1 не применяется filter4 — ID роутера; при -1 не применяется filter5 — ID статуса подключения; значения: 0 - не применяется; 1 - включен; 2 - отключен; 3 - сработал лимит; 4 - клиент удалён filter6ipbegin — начальный IP-адрес подсети filter6ipend — конечный IP-адрес подсети
В вложении добавлен скриншот надстройки над биллингом, с двумя связками. Одна по идее должна работать как невалидная связка, ну а вторая как исключение. Это сообщение отредактировал(а) PriZraK - 13.5.2010, 07:06 Присоединённый файл ( Кол-во скачиваний: 10 )
______.JPG 77,90 Kb |
||||||||||
|
|||||||||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
PriZraK, а в чем, собсно вопрос?
Объем еще не значит точность. Это сообщение отредактировал(а) Zloxa - 13.5.2010, 09:39 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| DimW |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 4 Всего: 44 |
долго втыкал, поправь если не прав: 1) сушествует множество правил для выявления ошибок. ("тип клиента" = "Юридическое лицо" и "роутер" = "ZERO") ("тип клиента" = "Юридическое лицо" и "роутер" = "ZERO" и "еще занчение" = "бла бла бла") 2) существуют критерии по которым ошибочные данные нужно исключить из списка ошибок. (клиент != "Иванов") (клиент != "Петров") (клиент != "Сидовор") отсюда:
что если запрос сначала найдет все ошибки, а затем из него исключить "исключения":
|
||||
|
|||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |