У меня есть строковая переменная $, и я использую
SELECT * FROM db WHERE description LIKE '%$string%' OR headline LIKE '%$string%'
Как видно, я хочу найти два поля «description» и «headline», чтобы увидеть, соответствует ли строковая переменная любой из них.
Проблема в том, что я хочу, чтобы она соответствовала целым словам !!!
Пример: если описание содержит «привет», достаточно, если $ string – это «h». это не то, что я хочу. Он должен соответствовать всему слову!
Я разделил запрос на слова для этого? или что?
Если вам требуется полное совпадение слов, вам следует попробовать попробовать FULLTEXT. Одно из предпосылок заключается в том, что в вашей таблице должен использоваться движок MyISAM:
CREATE TABLE test ( id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, headline VARCHAR(120) NOT NULL, description VARCHAR(255) NOT NULL, FULLTEXT(headline, description) ) ENGINE=MyISAM;
Вы запросили бы совпадения так:
SELECT * FROM test WHERE MATCH (headline,description) AGAINST('$string');
Это имеет дополнительное преимущество при заказе ваших результатов по релевантности.
Альтернативой полному поиску текста, который может быть достаточно, является использование функции REGEXP.
Тогда ваш запрос может быть следующим:
SELECT * FROM db WHERE description REGEXP '[[:<:]]$string[[:>:]]' = 1 OR headline REGEXP '[[:<:]]$string[[:>:]]' = 1