Есть ли такой оператор в MySql?
От: destroy  
Дата: 09.09.08 12:03
Оценка:
Есть ли такой оператор в MySQL, который проверял бы — содержится ли значение поля в определенной строке. То есть:
например

select * from table where table.field содержится в 'текст текст текст'

то есть это что-то вроде LIKE только наоборот
Re: Есть ли такой оператор в MySql?
От: wellwell Австралия https://www.softperfect.com
Дата: 09.09.08 12:19
Оценка:
"destroy" <37475@users.rsdn.ru> wrote in message news:3095968@news.rsdn.ru...
> Есть ли такой оператор в MySQL, который проверял бы — содержится ли значение поля в определенной строке. То есть:
> например
> select * from table where table.field содержится в 'текст текст текст'
> то есть это что-то вроде LIKE только наоборот

Ага, есть...
select * from table where 'текст текст текст' like table.field
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Есть ли такой оператор в MySql?
От: destroy  
Дата: 09.09.08 12:49
Оценка:
W>Ага, есть...
W>
W>select * from table where 'текст текст текст' like table.field
W>


)) Да, мне это пришло в голову, но как быть если мне надо использовать конструкцию like '%table.field%' ?? так же нельзя написать
Re[3]: Есть ли такой оператор в MySql?
От: LuciferArh Россия  
Дата: 09.09.08 13:02
Оценка:
Здравствуйте, destroy, Вы писали:


D>)) Да, мне это пришло в голову, но как быть если мне надо использовать конструкцию like '%table.field%' ?? так же нельзя написать


Можно. В динамическом SQL.
С годами я делаюсь все менее терпимым к людям неумным и неумеющим работать свое дело очень хорошо. (с) М. Веллер
Re[3]: Есть ли такой оператор в MySql?
От: wellwell Австралия https://www.softperfect.com
Дата: 09.09.08 13:36
Оценка:
"destroy" <37475@users.rsdn.ru> wrote in message news:3096077@news.rsdn.ru...
> )) Да, мне это пришло в голову, но как быть если мне надо использовать конструкцию like '%table.field%' ?? так же нельзя написать

Склей ее CONCAT'ом...
select * from table where 'текст текст текст' like concat('%', table.field, '%')
Posted via RSDN NNTP Server 2.1 beta
Re[4]: Есть ли такой оператор в MySql?
От: destroy  
Дата: 09.09.08 14:54
Оценка:
Здравствуйте, wellwell, Вы писали:

W>"destroy" <37475@users.rsdn.ru> wrote in message news:3096077@news.rsdn.ru...

>> )) Да, мне это пришло в голову, но как быть если мне надо использовать конструкцию like '%table.field%' ?? так же нельзя написать

W>Склей ее CONCAT'ом...

W>
W>select * from table where 'текст текст текст' like concat('%', table.field, '%')
W>


О! спасиб!))
Re[5]: Есть ли такой оператор в MySql?
От: Роман Дубров Украина Я@Blogspot
Дата: 10.09.08 08:18
Оценка:
destroy пишет:

> W>select * from table where 'текст текст текст' like concat('%', table.field, '%')


вот только фуллскан тут гарантирован...

--
np: [foobar2000] not started
Posted via RSDN NNTP Server 2.1 beta
http://www.linkedin.com/in/romandubrov .::. http://roman-dubrov.blogspot.com/ .::. http://www.flickr.com/photos/romandubrov/
Re: Есть ли такой оператор в MySql?
От: zaro  
Дата: 10.09.08 19:28
Оценка:
Здравствуйте, destroy, Вы писали:

D>Есть ли такой оператор в MySQL, который проверял бы — содержится ли значение поля в определенной строке.

D> То есть:
D>select * from table where table.field содержится в 'текст текст текст'
D>то есть это что-то вроде LIKE только наоборот

функция LOCATE(substr, str) быстрее LIKE. Отдает позицию вхождения подстроки или 0.

SELECT * FROM table WHERE LOCATE(table.field, 'текст текст текст') > 0
Re[2]: Есть ли такой оператор в MySql?
От: Ziaw Россия  
Дата: 13.09.08 16:13
Оценка:
Здравствуйте, zaro, Вы писали:

Z>функция LOCATE(substr, str) быстрее LIKE. Отдает позицию вхождения подстроки или 0.

что, даже такой оптимизации mysql не умеет делать это уже совсем грустно.
а при like 'prefix%' индекс умеет использовать?
... << RSDN@Home 1.2.0 alpha 4 rev. 1099>>
Re[3]: Есть ли такой оператор в MySql?
От: Роман Дубров Украина Я@Blogspot
Дата: 15.09.08 12:36
Оценка:
Ziaw пишет:

> что, даже такой оптимизации mysql не умеет делать это уже совсем грустно.

при чем тут оптимизация — просто регекспы всегда работают медленнее
поиска по полному вхождению. А индексы, вестимо, ни там ни там не юзаются

> а при like 'prefix%' индекс умеет использовать?

конечно

--
np: [foobar2000] not started
Posted via RSDN NNTP Server 2.1 beta
http://www.linkedin.com/in/romandubrov .::. http://roman-dubrov.blogspot.com/ .::. http://www.flickr.com/photos/romandubrov/
Re[4]: Есть ли такой оператор в MySql?
От: Ziaw Россия  
Дата: 15.09.08 20:40
Оценка:
Здравствуйте, Роман Дубров, Вы писали:

РД>при чем тут оптимизация — просто регекспы всегда работают медленнее

РД>поиска по полному вхождению. А индексы, вестимо, ни там ни там не юзаются

>> а при like 'prefix%' индекс умеет использовать?

РД>конечно

при чем тут регэкспы? like '%substr%' заменять на поиск подстроки умеет любой нормальный оптимизатор, тут не надо быть семи пядей во лбу.
... << RSDN@Home 1.2.0 alpha 4 rev. 1099>>
Re[5]: Есть ли такой оператор в MySql?
От: Роман Дубров Украина Я@Blogspot
Дата: 16.09.08 09:36
Оценка:
Ziaw пишет:

> при чем тут регэкспы? like '%substr%' заменять на поиск подстроки умеет

> любой нормальный оптимизатор, тут не надо быть семи пядей во лбу.

мускуль не умеет отличать like '%substr%' от, к примеру, like
'%sub%st?r%', и оптимизировать 1й вариант до locate()
Впрочем, это ему особо и не требуется, т.к. разницу в выполнении по
времени заметить очень сложно — это ближе к религиозным предрассудкам,
вроде преимущества одиночных кавычек над двойными в php

--
np: [foobar2000] not started
Posted via RSDN NNTP Server 2.1 beta
http://www.linkedin.com/in/romandubrov .::. http://roman-dubrov.blogspot.com/ .::. http://www.flickr.com/photos/romandubrov/
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.