MySQL. Как отобрать строки/поля с двумя пробелами

12
Asar
На сайте с 23.08.2004
Offline
321
2261

Varchar. В нем могут содержаться текстовые строки из одного слова (нет пробелов), двух слов (один пробел) и трех слов (два пробела). Вопрос: как отобрать одним запросом поля с двумя пробелами? Т.е.:

lalala

lalala tralala

lalala tralala tralala

lalala tralala

Какое-нить регулярное выражение попользовать? Если да, то просьба подсказать убогому, какое именно.

Спасибо.

edogs software
На сайте с 15.12.2005
Offline
775
#1

like же.

select * from tbl where fld like '% % %'

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
[Удален]
#2

Вывод количества слов в данном field, упорядоченные по возрастанию:


select mytable.myfield, LENGTH(mytable.myfield) - LENGTH(REPLACE(mytable.myfield, ' ', '')) + 1 as 'COUNT_WORDS' from mytable ORDER BY COUNT_WORDS DESC;

Вывод записей где количество слов равно двум:


select mytable.myfield, LENGTH(mytable.myfield) - LENGTH(REPLACE(mytable.myfield, ' ', '')) + 1 as 'COUNT_WORDS' from mytable having COUNT_WORDS=2;
Asar
На сайте с 23.08.2004
Offline
321
#3

edogs, imagine, спасибо, щас бум пробовать.

A
На сайте с 19.07.2010
Offline
130
#4
edogs:
like же.
select * from tbl where fld like '% % %'

отберет два и больше пробелов.

Если нужно только два пробела, то наверное будет вот такой смешний запрос:

select * from tbl where fld like '% % %' and fld not like '% % % %'

.............
дани мапов
На сайте с 06.09.2012
Offline
204
#5
admak:
отберет два и больше пробелов.

ТС указал, что может быть не более двух пробелов.

Написание и доработка скриптов (PHP, MySQL, JavaScript, jQuery) (/ru/forum/811046)
LEOnidUKG
На сайте с 25.11.2006
Offline
1724
#6

И кто мой комментарий про производительностью удалил? У нас тут цензура какая-то что-ли появилась?

Повторю, свой комментарий по поводу:

select * from tbl where fld like '% % %' and fld not like '% % % %'

Если такое запустить в большой таблице, то таблица загнётся т.к. like в таком виде не использует индексы.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
SeVlad
На сайте с 03.11.2008
Offline
1609
#7
LEOnidUKG:
И кто мой комментарий про производительностью удалил? У нас тут цензура какая-то что-ли появилась?

LEOnidUKG, во первых, этом топике пока ещё нет удалённых постов (если что - можешь мне в личку посомневаться). Во вторых, ты зачем себе неприятности ищешь? Ты же должен знать, что такие вопросы - это 4,6.

Вопросы риторические.

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
W
На сайте с 09.04.2013
Offline
46
#8

 SELECT * FROM `tbl` WHERE field  REGEXP '( .+){2}';
edogs software
На сайте с 15.12.2005
Offline
775
#9
LEOnidUKG:
Если такое запустить в большой таблице, то таблица загнётся т.к. like в таком виде не использует индексы.

Покажите запрос удовлетворяющий задачам ТС, работающий по его таблице и использующий индексы?

admak:
отберет два и больше пробелов.

А больше быть не может по постановке задачи.

admak:
Если нужно только два пробела, то наверное будет вот такой смешний запрос:
select * from tbl where fld like '% % %' and fld not like '% % % %'

Если додумывать задачу, то Ваш запрос тоже будет ошибочный, т.к. отсеет "слово1 слово2 слово3".

[Удален]
#10
webjey:
 SELECT * FROM `tbl` WHERE field  REGEXP '( .+){2}';

будет выдавать выдавать в т.ч. строки где пробелов больше двух (как и версия с %). Через regexp, можно так, тогда будет точно 2 пробела.


select mytable.myfield from mytable where mytable.myfield REGEXP '^[^ ]*[ ]{1}[^ ]*[ ]{1}[^ ]*$';

или так: REGEXP '^[^ ]*([ ]{1}[^ ]*){2}$' , или так =) REGEXP '^[^ ]*( [^ ]*){2}$';

а вообще уже вроде решена задача, зачем спорить. Пусть лучше ТС, скажет как он поступил.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий