Where like не работает

LIKE не работает в SQL-запросе из php

niko111

Новичок

LIKE не работает в SQL-запросе из php

Здравствуйте уважаемые форумчане!
пишу скрипт который выбирает данные, так вот локально на компьютере все отрабатывает прекрасно.
После того как залил на хостинг все, всегда выдается сообщения что записей нету в выборке.

Mr_Max

Первый класс. Зимние каникулы ^_^

Будь добр при проблемах с запросами показывать сами заросы, а не смесь sql c php

А вообще тебе сюда
www.phpfaq.ru/debug

niko111

Новичок

Фанат

oncle terrible

это значит, что, что с базой работают SQL запросы, а не функции PHP.
и первое, что надо сделать, выясняя причину проблему — это посмотреть на сами запросы.

niko111

Новичок

Автор оригинала: *****
это значит, что, что с базой работают SQL запросы, а не функции PHP.
и первое, что надо сделать, выясняя причину проблему — это посмотреть на сами запросы.

очень хорошо.
как именно ты разбирался?

Изучал экранирование http://phpfaq.ru/slashes#like
копал поиск по форуму на подобные проблемы, искал в яндексе.

mysql_query(«SELECT count(*) FROM drug WHERE t_name LIKE ‘%$name_drug%'»);

в $name_drug передаются названия лекарств из dbf таблицы, например:
Лекарство Масло гвоздики 10мл
Лекарство Золототысячник трава 50г

var_dump от $name_drug возвращает string(100) «Лекарство Золототысячник трава 50г »
var_dump от mysql_query возвращает resource(171) of type (mysql result)

Пожалуйста помогите разобраться почему LIKE не работает на хостинге

Фанат

oncle terrible

то есть, если у тебя сломается машина, ты будешь искать в яндексе по запросу «сломалась машина»?

ребят, без инженерного подхода в программировании делать не-че-го!
надо уметь действительно разбираться. исправлять не те проблемы, которые подсказывает фантазия, а те, которые РЕАЛЬНО ЕСТЬ. Для этого надо их уметь находить. Отлаживая свою программу.

Где в твоих маслах гвоздики хоть одно подчеркивание или слеш? Если их нету, то при чем здесь «изучал экранирование»? почему ты занимался решение проблему, которой нет?

ты отправляешь в базу ЗАПРОС. Ну ладно — сам не дотумкал его вывести — тебе уже здесь ТРИ раза сказали — выведи запрос целиком. Где он?
где вывод этого же самого поля через вар-дамп и сравнение побуквенное обеих строк?

Источник

Codeigniter like, or_like не работает с where

Я обнаружил проблему в своем приложении codeigniter. Я написал простой поисковый запрос, используя 4 разных типа like и or_like.

И он работает так, как я хотел, но я решил добавить в свою таблицу новый столбец под названием «active», и я хочу отображать только строки, которые стали активными = 1. Поэтому я попытался добавить где в свой запрос, но это не сработало. как я и предполагал.

В этом запросе также отображаются строки с активным значением 0. Как я могу исправить это, чтобы отображать только строки с активным = 1 в codeigniter?

4 ответа

Здравствуйте, пожалуйста, используйте следующий код

Вы также можете использовать группировку запросов.

Код будет выглядеть так:

Использование group_start и group_end гарантирует, что эта часть операторов or_like между ними будет заключена в скобки.

Если вы собираетесь использовать обработку данных на стороне сервера, вы также можете столкнуться с этой проблемой, но это обходной путь.

Для объяснения кода @ Roshan, потому что ответ может быть не очевиден для людей, изучающих SQL в CI. (Я также исправил ошибки в коде.)

Читайте также:  Bionime gm100 как настроить

Итак, ваш окончательный запрос будет выглядеть так:

Вот что спрашивает выше:

Более простой способ просмотреть, но более сложный способ написать код (но, возможно, легче понять):

Бывают случаи, когда вам нужно сделать это таким образом. Например, если active может быть несколько состояний. on , off , pending , и вам нужно проверить это поле на предмет определенного состояния. В вашем случае это не обязательно, поскольку active всегда равно 1, но если active может быть более чем одной вещью, которую вы хотите, вам придется указать это в своем конструкторе запросов .

Источник

Не работает оператор Like

Есть таблица клиентов, нужно отобрать строки в таблице по ФИО клиента. Хочется сделать такую возможность, чтобы пользователь ФИО не полностью, а какую-то часть и вбирались все строки, удовлетворяющие запросу.

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Не работает оператор Like
В Access 2016 есть условная база данных, в которой по условию, мне надо сделать запрос через фильтр.

Не работает оператор |
Или я чего — то не понимаю, но разве он не должен добавлять биты? #include #include.

Не работает оператор if =(
Всем доброго времени суток ! Вчера с горем пополам поставил AlphaControls package после етого.

Решение

Небольшое пояснение (из хелпа):
Язык SQL ядра Microsoft Jet поддерживает использование в операторе Like как подстановочных знаков ANSI SQL, так и подстановочных знаков ядра Microsoft Jet. Подстановочные знаки ANSI и ядра Microsoft Jet взаимно исключают друг друга. Следует пользоваться одним из наборов таких знаков, не смешивая их. Подстановочные знаки ANSI SQL доступны только в случае использования ядра Jet версии 4.X и программы Microsoft OLE DB Provider для Jet. При работе с приложениями Microsoft Access или DAO подстановочные знаки ANSI SQL воспринимаются как строковые константы. Обратное имеет место при использовании программы Microsoft OLE DB Provider для Jet и ядра Jet версии 4.X.

Соответствующие знаки Язык SQL Microsoft Jet ANSI SQL
Любой одиночный знак. ? _ (подчеркивание)
Произвольное количество знаков. * %

Оператор and не работает?
Предикат (> x y) истинен, если x больше y. Опишите с помощью предиката > и условного предложения.

Не работает оператор gets()
Господа, помогите! нужна прога для слипания строк, не используя стандартный оператор.

Не работает оператор if else
Всем привет 🙂 Не могу понять , почему не работает оператор if else . Суть программы в том , что.

Не работает оператор IF
Всем привет. Занимаюсь постройкой привода для экваториальной монтировки телескопа, привод состоит.

Источник

LIKE (Transact-SQL)

Применимо к: SQL Server (все поддерживаемые версии) База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics Параллельное хранилище данных

Определяет, совпадает ли указанная символьная строка с заданным шаблоном. Шаблон может включать обычные символы и символы-шаблоны. Во время сравнения с шаблоном необходимо, чтобы его обычные символы в точности совпадали с символами, указанными в строке. Символы-шаблоны могут совпадать с произвольными элементами символьной строки. Использование символов-шаблонов в отличие от использования операторов сравнения строки (= и !=) делает оператор LIKE более гибким. Если тип данных одного из аргументов не является символьной строкой, компонент Компонент SQL Server Database Engine, если это возможно, преобразует его в тип данных символьной строки.

Синтаксические обозначения в Transact-SQL

Синтаксис

ESCAPE и STRING_ESCAPE сейчас не поддерживаются в Azure Synapse Analytics и Система платформы аналитики (PDW).

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

Аргументы

match_expression
Любое допустимое выражение expression символьного типа данных.

pattern
Конкретная строка символов для поиска в match_expression может содержать следующие допустимые символы-шаблоны. Длина значения pattern не может превышать 8000 байт.

Символ-шаблон Описание Пример
% Любая строка, содержащая ноль или более символов. Инструкция WHERE Название LIKE ‘%компьютер%’ выполняет поиск и выдает все названия книг, содержащие слово «компьютер».
_ (подчеркивание) Любой одиночный символ. Инструкция WHERE фамилия_автора LIKE ‘_етров’ выполняет поиск и выдает все имена, состоящие из шести букв и заканчивающиеся сочетанием «етров» (Петров, Ветров и т.п.).
[ ] Любой одиночный символ, содержащийся в диапазоне ([a-f]) или наборе ([abcdef]). Инструкция WHERE Фамилия_автора LIKE ‘[Л-С]омов’ выполняет поиск и выдает все фамилии авторов, заканчивающиеся на «омов» и начинающиеся на любую букву в промежутке от «Л» до «С», например Ломов, Ромов, Сомов и т.п. При выполнении операции поиска в диапазоне символы, включенные в диапазон, могут изменяться в зависимости от правил сортировки параметров сортировки.
[^] Любой одиночный символ, не содержащийся в диапазоне ([^a-f]) или наборе ([^abcdef]). Инструкция WHERE Фамилия_автора LIKE ‘ив[^а]%’ выполняет поиск и выдает все фамилии, начинающиеся на «ив», в которых третья буква отличается от «а».

escape_character
Символ, помещаемый перед символом-шаблоном для того, чтобы символ-шаблон рассматривался как обычный символ, а не как шаблон. Аргумент escape_character является символьным выражением, не имеющим значения по умолчанию и возвращающим результат в виде одного символа.

Типы результата

Boolean

Значение результата

Оператор LIKE возвращает значение TRUE, если аргумент match_expression совпадает с указанным аргументом pattern.

Комментарии

При использовании оператора LIKE для сравнения строк во внимание принимаются все символы строки-шаблона. К значимым символам также относятся начальные и конечные пробелы. Если операция сравнения в запросе должна вернуть все строки, содержащие строки LIKE ‘абв ‘ (с символом пробела на конце), то строка, содержащая «абв» (без пробела), не будет возвращена. Однако завершающие пробелы в выражении, с которым сравнивается шаблон, не учитываются. Если операция сравнения в запросе должна вернуть все строки, содержащие строки LIKE ‘абв’ (без знака пробела на конце), то будут возвращены все строки, содержащие «абв», как с завершающими пробелами, так и без них.

При сравнении строк с помощью оператора LIKE с использованием шаблона, содержащего тип данных char и varchar, могут возникнуть проблемы из-за методов хранения каждого типа данных. В ходе выполнения следующего примера локальная переменная char передается хранимой процедуре, а затем с помощью сравнения с шаблоном выполняется поиск всех сотрудников, чьи фамилии начинаются с указанной последовательности букв.

Выполнение процедуры FindEmployee не дает результатов, так как переменная типа char ( @EmpLName ) всегда имеет длину в 20 символов, до которой дополняется завершающими знаками пробела. Переменные, содержащиеся в столбце LastName , имеют тип varchar. Поэтому завершающие пробелы в них не дописываются. Данная процедура завершается неудачей, так как завершающие пробелы учитываются.

Процедура из следующего примера выполняется успешно, так как завершающие пробелы к переменной типа varchar не добавляются.

Совпадение с шаблоном с использованием оператора LIKE

Оператор LIKE поддерживает шаблоны в ASCII и Юникоде. Если все аргументы (match_expression, pattern и escape_character, если он указан) имеют символьный тип ASCII, то применяется шаблон ASCII. В случае, когда какой-либо из аргументов имеет тип данных Юникод, выполняется преобразование всех аргументов в Юникод и применяется шаблон Юникод. Если вы используете оператор LIKE с типом данных Юникода (nchar или nvarchar), завершающие пробелы учитываются в отличие от других типов данных (не Юникода). Работа оператора LIKE с данными в Юникоде совместима со стандартом ISO. Принцип работы оператора LIKE с данными ASCII совместим с более ранними версиями SQL Server.

Приведенные ниже примеры поясняют различия между результатами сравнения данных с шаблонами оператора LIKE, представленными в Юникоде и ASCII.

Операции сравнения с помощью оператора LIKE зависят от параметров сортировки. Дополнительные сведения см. в разделе COLLATE (Transact-SQL).

Использование символа-шаблона «%»

Если в операторе LIKE указать символ ‘5%’, то компонент Компонент Database Engine будет искать число «5», за которым следует любая строка с числом символов от нуля и больше.

Например, при выполнении следующего примера отображаются все динамические административные представления базы данных AdventureWorks2012, так как все они начинаются символами dm .

Чтобы отобразить все объекты, не являющиеся динамическими административными представлениями, используется синтаксис NOT LIKE ‘dm%’ . Например, если всего имеется 32 объекта и оператор LIKE выдает 13 наименований, совпадающих с шаблоном, то оператор NOT LIKE возвращает 19 объектов, не соответствующих указанному в операторе LIKE шаблону.

По такому шаблону, как LIKE ‘[^d][^m]%’ , не всегда будут возвращаться одни и те же имена. Вместо 19 имен можно найти только 14, так как имена, которые начинаются с буквы d или у которых второй буквой является m , будут исключены из результата, как и имена динамических административных представлений. Причиной такой реакции на событие является поэтапный поиск отрицательных символов-шаблонов: за один шаг обрабатывается один символ-шаблон. Процесс поиска совпадений прекращается при возникновении сбоя на любой стадии выполнения.

Использование символов-шаблонов в качестве литералов

Символы-шаблоны могут быть использованы в качестве литералов. Чтобы использовать символ-шаблон в качестве литерала, его необходимо заключать в скобки. В следующей таблице представлены несколько примеров применения ключевого слова LIKE вместе с символами-шаблонами [ ].

Символ Значение
LIKE ‘5[%]’ 5 %
LIKE ‘[_]n’ _n
LIKE ‘[a-cdf]’ a, b, c, d или f
LIKE ‘[-acdf]’ -, a, b, c, d или f
LIKE ‘[ [ ]’ [
LIKE ‘]’ ]
LIKE ‘abc[_]d%’ abc_d и abc_de
LIKE ‘abc[def]’ abcd, abce и abcf

Совпадение с шаблоном с помощью предложения ESCAPE

Можно искать символьные строки, в состав которых входит один или более специальных символов-шаблонов. Например, таблица discounts базы данных customers может содержать значения скидок, включающих знак процента (%). Чтобы выполнить поиск знака процента в качестве символа-шаблона, необходимо ввести ключевое слово ESCAPE и escape-символ. Например, образец базы данных содержит столбец с именем comment, в котором хранится значение «30%». Чтобы найти строки, содержащие последовательность символов «30%» в столбце comment, необходимо указать предложение WHERE, например WHERE comment LIKE ‘%30!%%’ ESCAPE ‘!’ . Если предложение ESCAPE и escape-символ не указаны, компонент Компонент Database Engine вернет все записи, содержащие последовательность символов «30!».

Если в шаблоне LIKE после escape-символа нет никакого символа, то шаблон является недопустимым и оператор LIKE возвращает значение FALSE. Если символ после escape-символа не является символом-шаблоном, то escape-символ игнорируется, а следующий символ рассматривается как обычный символ в шаблоне. К этим символам-шаблонам относятся: подчеркивание (_), процент (%) и левая квадратная скобка ([), в том случае, если они заключены в квадратные скобки. Escape-символы могут использоваться в квадратных скобках ([ ]), включая: знак вставки (^), дефис (-) и правую квадратную скобку (]).

Символ 0x0000 (char(0)) не определен в параметрах сортировки Windows, и его нельзя включать в LIKE.

Примеры

A. Применение оператора LIKE с символом-шаблоном %

В следующем примере в таблице 415 выполняется поиск всех телефонных номеров с кодом города PersonPhone .

Б. Применение оператора NOT LIKE с символом-шаблоном %

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

В. Применение предложения ESCAPE

В следующем примере предложение ESCAPE и escape-символ используются для поиска символьной строки 10-15% в столбце c1 таблицы mytbl2 .

Г. Использование символов-шаблонов [ ]

В следующем примере выполняется поиск в таблице Person сотрудников с именем Cheryl или Sheryl .

В следующем примере выполняется поиск строк в таблице Person для сотрудников с фамилией Zheng или Zhang .

Примеры: Azure Synapse Analytics и Система платформы аналитики (PDW)

Д. Применение оператора LIKE с символом-шаблоном %

В следующем примере в таблице DimEmployee выполняется поиск всех сотрудников, телефонные номера которых начинаются с 612 .

Е. Применение оператора NOT LIKE с символом-шаблоном %

В следующем примере в таблице DimEmployee выполняется поиск всех телефонных номеров, которые не начинаются с 612 . .

Ж. Применение оператора LIKE с символом-шаблоном _

В следующем примере в таблице DimEmployee выполняется поиск всех телефонных номеров, начинающихся с 2 и заканчивающихся на 6 . Подстановочный знак «%» добавлен в конце шаблона поиска, что соответствует любым следующим символам в значениях столбца с телефонными номерами.

Источник

Оцените статью