Заявка за символи на кирилица

C++ JAVA
Post Reply
User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3335
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 127

Заявка за символи на кирилица

Post by dakata__92 » Tue Sep 08, 2020 12:27 pm

Здравейте колеги.

Code: Select all

SELECT
	COUNT( * ) AS `count`,
	LENGTH( text ) AS length,
	text 
FROM
	table
WHERE
	text REGEXP "[а-яА-Я]" 
GROUP BY
	text
ORDER BY
	COUNT( * ) DESC
Тази заявка ми връща всички текстове съдържащи в себе си символи на кирилица. Има ли вариант да засичам броят на символите на кирилица за да визуализирам тези съобщения, които съдържат в себе си по-малко от 50% символи. Тоест искам да избегна визуализацията на текстове написани изцяло на кирилица, а да показвам смесените текстове, който в себе си съдъжат повече латински символи и по-малко кирилица.

Пример:
„Iskam davizualiziram този tekst“ но не и да „ визуализирам този tekst“.

User avatar
anonimen
Web-tourist
Web-tourist
Posts: 1600
Joined: Mon Jun 11, 2012 6:07 pm
Answers: 165
Location: Parse error: unexpected "}" in /home/index.php on line 26

Re: Заявка за символи на кирилица

Post by anonimen » Tue Sep 08, 2020 1:47 pm

Странно, май не е толкова лесно да отсяваш с regex в sql. https://stackoverflow.com/questions/213 ... e-function

Иначе да преброиш кирилицата - https://stackoverflow.com/questions/186 ... sql-column, някакво грубо "решение" би било да изброиш ръчно (генерирайки заявката с php примерно) наш'та азбука:

Code: Select all

SELECT `col` FROM table
WHERE 2 * LEN( REPLACE( (… REPLACE(`col`, 'а', '') …), 'я', '')) > LEN(`col`)

User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3335
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 127

Re: Заявка за символи на кирилица

Post by dakata__92 » Tue Sep 08, 2020 2:11 pm

anonimen wrote:
Tue Sep 08, 2020 1:47 pm
Странно, май не е толкова лесно да отсяваш с regex в sql. https://stackoverflow.com/questions/213 ... e-function

Иначе да преброиш кирилицата - https://stackoverflow.com/questions/186 ... sql-column, някакво грубо "решение" би било да изброиш ръчно (генерирайки заявката с php примерно) наш'та азбука:

Code: Select all

SELECT `col` FROM table
WHERE 2 * LEN( REPLACE( (… REPLACE(`col`, 'а', '') …), 'я', '')) > LEN(`col`)
REGEXP "[а-яА-Я]" хваща и текстове съдържащи „№“ или подобни символи, което ме устройва. Вижда ми се прекалено голяма хамалогия да се върти всяка буква от азбуката по отделно. Нямам наличен REGEX_REPLACE() иначе бих тествал с него.

User avatar
anonimen
Web-tourist
Web-tourist
Posts: 1600
Joined: Mon Jun 11, 2012 6:07 pm
Answers: 165
Location: Parse error: unexpected "}" in /home/index.php on line 26

Re: Заявка за символи на кирилица

Post by anonimen » Tue Sep 08, 2020 3:19 pm

dakata__92 wrote:
Tue Sep 08, 2020 2:11 pm
anonimen wrote:
Tue Sep 08, 2020 1:47 pm
Странно, май не е толкова лесно да отсяваш с regex в sql. https://stackoverflow.com/questions/213 ... e-function

Иначе да преброиш кирилицата - https://stackoverflow.com/questions/186 ... sql-column, някакво грубо "решение" би било да изброиш ръчно (генерирайки заявката с php примерно) наш'та азбука:

Code: Select all

SELECT `col` FROM table
WHERE 2 * LEN( REPLACE( (… REPLACE(`col`, 'а', '') …), 'я', '')) > LEN(`col`)
REGEXP "[а-яА-Я]" хваща и текстове съдържащи „№“ или подобни символи, което ме устройва. Вижда ми се прекалено голяма хамалогия да се върти всяка буква от азбуката по отделно. Нямам наличен REGEX_REPLACE() иначе бих тествал с него.
Точно, някакъв вид regex_replace и аз не мога да открия.
Нямаш ли вариант да изтеглиш всички резултати и да направиш това филтриране през php?

User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3335
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 127

Re: Заявка за символи на кирилица

Post by dakata__92 » Tue Sep 08, 2020 3:23 pm

anonimen wrote:
Tue Sep 08, 2020 3:19 pm
dakata__92 wrote:
Tue Sep 08, 2020 2:11 pm
anonimen wrote:
Tue Sep 08, 2020 1:47 pm
Странно, май не е толкова лесно да отсяваш с regex в sql. https://stackoverflow.com/questions/213 ... e-function

Иначе да преброиш кирилицата - https://stackoverflow.com/questions/186 ... sql-column, някакво грубо "решение" би било да изброиш ръчно (генерирайки заявката с php примерно) наш'та азбука:

Code: Select all

SELECT `col` FROM table
WHERE 2 * LEN( REPLACE( (… REPLACE(`col`, 'а', '') …), 'я', '')) > LEN(`col`)
REGEXP "[а-яА-Я]" хваща и текстове съдържащи „№“ или подобни символи, което ме устройва. Вижда ми се прекалено голяма хамалогия да се върти всяка буква от азбуката по отделно. Нямам наличен REGEX_REPLACE() иначе бих тествал с него.
Точно, някакъв вид regex_replace и аз не мога да открия.
Нямаш ли вариант да изтеглиш всички резултати и да направиш това филтриране през php?
Имам го, като вариант, но ще трябва да въртя поне два излишни цикъла.

User avatar
Revelation
Web-tourist
Web-tourist
Posts: 899
Joined: Sun Mar 24, 2013 1:23 pm
Answers: 63

Re: Заявка за символи на кирилица

Post by Revelation » Tue Sep 08, 2020 3:37 pm

За работа ли ти трябва или ей така за фъна?

Предвид очаквания резултат, 2 цикъла ще са по-бързи от всичките магии, които ще трябва да се направят, за да сътвориш заявката. А ако говорим и в таблица с много данни, това ще е овъркил.
Ако не правиш това просто, защото ти се разписват по-комплексни заявки със SQL, с 2 ръце съм да вършиш тази гимнастика с PHP.

User avatar
Revelation
Web-tourist
Web-tourist
Posts: 899
Joined: Sun Mar 24, 2013 1:23 pm
Answers: 63

Re: Заявка за символи на кирилица

Post by Revelation » Tue Sep 08, 2020 3:41 pm

Между другото за каква база данни говорим? MySQL 5.7 или MariaDB? Защото MariaDB от 10.0.5 си имат REGEXP_REPLACE().

uphero
Потребител
Потребител
Posts: 773
Joined: Mon Feb 20, 2012 12:26 pm
Answers: 32
Location: Казанлък
Contact:

Re: Заявка за символи на кирилица

Post by uphero » Tue Sep 08, 2020 5:17 pm

И върти ги и запиши символите кирилица в нова колона като процент. Съответно при всеки ъпдейт/инсърт правиш същото. После е лесно.

xyz1
Нов
Нов
Posts: 180
Joined: Wed Jul 29, 2009 11:01 am

Re: Заявка за символи на кирилица

Post by xyz1 » Wed Sep 09, 2020 4:58 am

uphero wrote:
Tue Sep 08, 2020 5:17 pm
И върти ги и запиши символите кирилица в нова колона като процент. Съответно при всеки ъпдейт/инсърт правиш същото. После е лесно.
Наистина точно това е решението. Преброяваш ги при запис, а не всеки път при четене. Конвертираш първоначално таблицата, за да заложиш това ново поле. Регулярните изрази не могат да броят, така че това което искаш няма как да стане по някакъв автоматизиран начин.

User avatar
dakata__92
Web-tourist
Web-tourist
Posts: 3335
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 127

Re: Заявка за символи на кирилица

Post by dakata__92 » Wed Sep 09, 2020 6:07 am

Revelation wrote:
Tue Sep 08, 2020 3:37 pm
За работа ли ти трябва или ей така за фъна?
Предвид очаквания резултат, 2 цикъла ще са по-бързи от всичките магии, които ще трябва да се направят, за да сътвориш заявката. А ако говорим и в таблица с много данни, това ще е овъркил.
Ако не правиш това просто, защото ти се разписват по-комплексни заявки със SQL, с 2 ръце съм да вършиш тази гимнастика с PHP.
Здравей. Да за работа ми е необходимо. На мен като цяло просто ми трябваше да заместя utf-8 символите с нищо и на практика да сравня оригиналната дължина на стрина със заменената. Май накрая ще трябва да се примиря и да го направя с PHP.
Revelation wrote:
Tue Sep 08, 2020 3:41 pm
Между другото за каква база данни говорим? MySQL 5.7 или MariaDB? Защото MariaDB от 10.0.5 си имат REGEXP_REPLACE().
Извинявам се, че не съм уточнил, MySQL ползвам.
uphero wrote:
Tue Sep 08, 2020 5:17 pm
И върти ги и запиши символите кирилица в нова колона като процент. Съответно при всеки ъпдейт/инсърт правиш същото. После е лесно.
Текстовете от време на време могат да се променят от потребителите, така че не ми е вариант да записвам стойността, а трябва да проверявам динамично. Естествено ще кеширам заявките, така че ще постигна бързодействие.
xyz1 wrote:
Wed Sep 09, 2020 4:58 am
uphero wrote:
Tue Sep 08, 2020 5:17 pm
И върти ги и запиши символите кирилица в нова колона като процент. Съответно при всеки ъпдейт/инсърт правиш същото. После е лесно.
Наистина точно това е решението. Преброяваш ги при запис, а не всеки път при четене. Конвертираш първоначално таблицата, за да заложиш това ново поле. Регулярните изрази не могат да броят, така че това което искаш няма как да стане по някакъв автоматизиран начин.
Мен ме устройваше да мога да заменя символите с празен стринг, Така щях да изчисля разликата между дължината на реалния и променения текст.

Post Reply