Здравствуйте, разъясните пожалуйста. Так получилось что в разных формах дизайнер назвал одну и туже переменную по разному. Поэтому я решил воспользоваться комбинацией ИЛИ (OR) чтоб ему не переделывать. Вот какой запрос был создан и отправлен на обработку SELECT * FROM `tablica` WHERE `name`='' OR `nami`='' OR `name`='primer' OR `nami`='primer' Вот почему первые параметры пустые name и nami берутся из первой формы но в данном запросе они не участвовали а участвовали переменные со второго запроса. в итоге при анализе данного запроса мне выдается что все 4 параметра равно NULL но я получаю список из БД аж 64 строки. Каким образом это происходит если все 4 параметра не верны. Я конечно запрос сейчас упрощу чтоб участвовало только два первых параметра но хочу понять логику. В БД данной таблице пустых строк нет. И данного искомого параметра в столбцах таблицы тоже нет. Почему я делаю проверку одного и того же значения в разных столбцах - потому что в одном столбце пишется значение в единственном числе а во втором во множественном (ягода, ягоды).
Если в корабль не вкрутили винт, он потом может утонуть, дизайнер ошибся, пусть переделывает, дабы не тянуть за собой вереницу проблем... Я почему-то подумал, что если это форма, можно добавить скрытое поле А по запросу, хотелось бы конкретики, в операторах существует направленность, если запрос выполняется, значит в итоге он дает true, возможно интерпритатор читает NULL OR NULL и выдает true. размышляйте.
Ну почему при выдаче NULL OR NULL он дает NULL а если запись выполняется как NULL OR NULL OR NULL OR NULL то это TRUE. Вот что меня удивило. Поэтому и решил узнать из-за чего такое может быть.
Помогите пожалуйста сделать правильный запрос при таком обращение SELECT * FROM `tabl` WHERE `name` = '' OR `nami` = '' к БД MySQL я всеравно получаю часть списка из таблицы. Нужно проверить полученное значение есть оно в данных столбцах или нет. Если я данный параметр опускаю то есть получается строка вида что я представил выше то MySQL мне всеравно отдает часть списка. Как я писал в данных столбцах хранятся записи вида (ягода, ягоды).
поразмышляйте еще, на сам запрос посмотрите и поразмышляйте, мне кажется его нужно немного подправить, и в БД еще раз загляните, структура там какая
А че тут размышлять запретил в таком случае отправлять данный запрос в БД и все. Хотя разобраться охота но сроки поджимают. У меня была проблема с MySQL при обработке марок машин получилось так что марка автомобила ГАЗ и марка автомобиля ВАЗ для mysql одно и тоже. Пришлось дополнительное поле вводить чтоб в запросе были различия. А структура у данной таблицы простая есть три колонки id (индификатор и ключ) name (varchar) - содержит слова в единственном числе и nami (varchar) - содержит слова во множественном числе. Если пользователь пишет запрос скажем ищу "ягоды" то благодаря полю nami мы получаем индификатор id и выдаем уже по данному id нужный список. Или скажем он написал "ягода" то в этом случае срабатывает поле name и опять по полученному id выдаем список. Вот я и попробовал сделать запрос структурой УСЛОВИЕ = ИЛИ УСЛОВИЕ =. В моем случае получается запрос мне говорит при анализе что УСЛОВИЕ равно NULL т.е. не найдено в обоих случаях. Но при этом часть данных он все же дает на вывод возникает вопрос по какой логике он выбрал из 235 записей 64 как соответствующие истине если в данных записях нет соответствующих значений что стоят в запросе - они не пустые.
Все вопрос закрыт. Ну а чтоб такая запись не срабатывала можно написать SQL запрос: SELECT * FROM `tab` WHERE (`name` = '' AND `name` != '') OR (`nami` = '' AND `nami` != '') В первый параметр попадает значение из запроса а второй параметр говорит что данный запрос не должен быть пустым.