У меня есть такие строки «SEO» в простых категориях таблицы (id, name, seo) :
"abc" "abc 22" "abc 33"
как в MySQL получить с этим запросом
SELECT id FROM categories WHERE seo='abc' AND LENGTH('abc')='3';"
один точный результат строки «abc» из «abc» без нахождения «abc 22» и «abc 33»?
create table stuff ( id int auto_increment primary key, seo varchar(100) not null -- unique key (seo) not a bad idea ); insert stuff (seo) values ('abc'),('abc7'),('kitty likes abc'),('abc and more abc'),('kittens'); insert stuff (seo) values ('abc at beginning'),('frogs'),('and at the end abc'),('qwertyabcqwerty'); select id from stuff where seo='abc'; +----+ | id | +----+ | 1 | +----+ 1 row in set (0.02 sec)
Вот как выглядит поведение:
select * from stuff where seo like '%abc'; +----+--------------------+ | id | seo | +----+--------------------+ | 1 | abc | | 3 | kitty likes abc | | 4 | abc and more abc | | 8 | and at the end abc | +----+--------------------+ 4 rows in set (0.00 sec) select * from stuff where seo like 'abc%'; +----+------------------+ | id | seo | +----+------------------+ | 1 | abc | | 2 | abc7 | | 4 | abc and more abc | | 6 | abc at beginning | +----+------------------+ 4 rows in set (0.00 sec) select id,seo from stuff where seo like '%abc%'; +----+--------------------+ | id | seo | +----+--------------------+ | 1 | abc | | 2 | abc7 | | 3 | kitty likes abc | | 4 | abc and more abc | | 6 | abc at beginning | | 8 | and at the end abc | | 9 | qwertyabcqwerty | +----+--------------------+ 7 rows in set (0.00 sec)
Поскольку вы используете точный оператор сравнения, вы можете просто использовать:
SELECT id FROM categories WHERE seo = 'abc';
Нет необходимости тестировать длину, так как вы используете =
.