Как узнать, где именно не соблюдается условный оператор?

olegon

Новичок
Как узнать, где именно не соблюдается условный оператор?

SELECT * FROM table
WHERE A=5 AND B=2 AND C=8

Вопрос: если этот запрос не вернул ни одной записи, то как узнать где именно не соблюдались условия:
в A=5, в B=2 или в C=8.
Есть ли какая-то функция, которая возвращает результат логических операторов: типа [ 1 , 0 , 1 ] ???
т.е. А=5, В<>2, C=8
Спасибо за внимание.
 

Profic

just Profic (PHP5 BetaTeam)
[sql]SELECT *, A=5 AS pA, B=2 AS pB, C=8 AS pC FROM table WHERE pA AND pB AND pC[/sql]

PS. Баг однако.
[sql]select a=5 pa from dual[/sql]
 

Gas

может по одной?
Есть ли какая-то функция, которая возвращает результат логических операторов: типа [ 1 , 0 , 1 ]
и что она должна возвращать? если подобный результат для каждой строки таблицы то смотри на IF
 

olegon

Новичок
To Profic:
Идея конечно интересная, но так не будет работать.
Вернее, будет работать, если все условия истинные, тогда вернется запись(-си), где будет результат 0 или 1. Это да.
Но, если запись не возвращается, то везде NULL :(

To Gas
Я не понял ваш комментарий.
Мне нужно четко знать - почему запрос не дал положительный результат, т.е. вследствии невыполнения каких условных операторов? Чтобы после этого сказать пользователю: у вас не правильно то-то и (или) то-то (это например).
 

Gas

может по одной?
olegon
ты можешь дополнительным запросом узнать количество строк удовлетворяющих каждому условию
[sql]
SELECT sum(A = 5) AS pA, sum(B = 2) AS pB, sum(C = 8) AS pC
FROM TABLE
[/sql]
 

olegon

Новичок
Нет, так тоже не будет. Вообще суммирование записей ни к чему не приведет в любом варианте, наверно.
Тем более одним запросом.
Зная, что pb равно 4 (например), мы еще не знаем, что b равно 2 для а равного 5. Вот такая абракадабра выходит!
В MySQL вроде бы должна быть какая-то функция, которая показывает как разбирается строка условий (справа налево, кажется в MySQL'е) и делает буд-то "профилирование" этих условий.
Но, может я тут забрехался :)
 

Gas

может по одной?
Как насчёт получить все строки в которых есть совпадение хотя-бы по одному условию и "результат логических операторов: типа [ 1 , 0 , 1 ]", а дальше уже в логике приложения определить какие записи показать, а в каких не все условия сработали ? Это первый запрос Proficа, только вместо AND поставить OR.
 

olegon

Новичок
To Gas
Похоже, что так действительно можно.
Подставил у себя, получил что-то такое:
pA pB pC
1 0 0
0 1 0
0 1 1
0 1 0
0 1 1
Там, где будет 1 1 1 - значит запись соответствует всем условиям, если 1 0 1 - то не соблюдается pB, и дальше в таком же духе.
Посмотрел я на это еще раз и догоняю, что я некорректно решаю задачу. Получается, что нельзя однозначно сказать, где условие не соблюдается, а где соблюдается!!
Теперь буду последовательно идти: выбрал pA, если нормально, то выбираем рВ, если не нормально, то заставляем/ждем, пока рА станет истинным, и так дальше.
Прошу закрыть тему.
 
Сверху