Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - OssoH

#11
Hola,
estoy usando expresiones regulares para buscar palabras individuales y las reemplazar por otra.

Tengo esta función que funciona bien siempre y cuando la palabra que queramos reemplazar no tengo un punto decimal al final.


// Busca una palabra completa y la sustituye por otra
// insensible minusculas y mayúsculas
// https://stackoverflow.com/questions/19317493/php-preg-replace-case-insensitive-match-with-case-sensitive-replacement
function preg_ireplace($data, $search, $replace) {
$data = preg_replace_callback('/\b'.$search.'\b/i', function($matches) use ($replace)
{
   $i=0;
   return join('', array_map(function($char) use ($matches, &$i)
   {
      //return ctype_lower($matches[0][$i++])?strtolower($char):strtoupper($char);
      return $char;
   }, str_split($replace)));
}, $data);
return $data;
}



mi código es

$cadena = 'p.e. castellano g. marig ab pul. 1a';
$text = Tools::preg_ireplace($cadena, 'P.E.', 'HOLA');
$text = Tools::preg_ireplace($cadena, 'casteLLano', '***');
echo '<br>'.$cadena;
echo '<br>'.$text;


El resultado :
p.e. castellano g. marig ab pul. 1a
p.e. *** g. marig ab pul. 1a

Quiero que la palabra P.E. la interprete como palabra individual y no lo hace.
¿Alguien se le ocurre como hago que acepte el punto decimal?
Muchas gracias



#12
Bases de Datos / Re: Contar palabras Mysql
24 Noviembre 2021, 10:38 AM
Muchasss gracias.
Funciona!!  ;-) ;-) ;-)
#13
Bases de Datos / Contar palabras Mysql
23 Noviembre 2021, 11:51 AM
con la instrucción siguiente podemos contar el número de caracteres

SELECT CHAR_LENGTH('test string');

¿hay alguna forma de contar palabras?  (en el ejemplo anterior sería 2 palabras)?
Lo puedo hacer por PHP con str_word_count pero quería saber si por MYSQL me puede facilitar la cosa.
Gracias
#14
Cita de: MinusFour en  3 Noviembre 2021, 18:01 PM
Entonces no puedes usar: [[:<:]] ni [[:>:]], porque esos caracteres consideran PATATA-FRITA como dos palabras. Podrías usar:

Código (sql) [Seleccionar]
"(^|[[:blank:]]+)DEC\\.([[:blank:]]+|$)"

PERFECTOOOO FUNCIONA.
MUCHAS GRACIASSSSS
;-) ;-) ;-) ;-) ;-) ;-)
#15
Gracias por la explicación.
Pero yo quiero que busque cadenas de palabras completas y no fragmentos de cadena donde tenga la cadena de busqueda.

Es decir, si tengo

|Patata
|Patata-Frita
|Patata.Frita


Y escribo
SELECT dato FROM datos WHERE dato RLIKE 'patata'

me devolveria los 3 registros porque contienen la palabra patata cuando solo me deberia devolver la primera [patata].
Es decir que busque palabras completas y se considera palabra completa la separada por un espacio.

Ej :
arbol caido  => 2 palabras
arbol.caido => 1 palabra

Espero haberme explicado bien
Gracias



[
#16
Quiero encontrar los registros que tengan en el campo nombre la palabra DEC.   (acabado en punto).
Si uso el RLIKE tal y como os pongo a continuación no me funciona por culpa del punto


SELECT name
FROM ps_product p LEFT JOIN ps_product_lang pl ON (pl.id_product=p.id_product)
WHERE `name` RLIKE "[[:<:]]REVIVAL[[:>:]]"
AND `name` RLIKE "[[:<:]]DEC[[:>:]]"


me devuelve :
revival dec. gris marea
revival dec. arena acuada

En cambio si pongo en RLIKE el punto al final en DEC. no me funciona


SELECT name
FROM ps_product p LEFT JOIN ps_product_lang pl ON (pl.id_product=p.id_product)
WHERE `name` RLIKE "[[:<:]]REVIVAL[[:>:]]"
AND `name` RLIKE "[[:<:]]DEC.[[:>:]]"


No devuelve ningún registro.

¿porque cuando le pongo el 'punto' no funciona? Es que tengo palabras a buscar donde el punto está dentro del string a buscar y me da problemas.

¿alguna solución?
Gracias


#17
Bases de Datos / Re: consulta mysql
24 Junio 2021, 08:53 AM
Funciona!! ya lo tengo arreglado.
Gracias
#18
Bases de Datos / Re: consulta mysql
23 Junio 2021, 18:52 PM
Creo que ya lo he solucionado. Voy a comprobarlo bien


SELECT id_product, id_tag_special
FROM ps_product_tag_special
WHERE id_tag_special IN (8,15)
GROUP BY id_product
HAVING COUNT(DISTINCT id_tag_special) = 2
#19
Bases de Datos / Re: consulta mysql
23 Junio 2021, 18:41 PM
Quiero obtener los id_product que tengan 8 y 15

Si utilizo la función IN de mysql no me sirve porque es como si hiciera un OR y no busco eso.
#20
Bases de Datos / consulta mysql
23 Junio 2021, 17:50 PM
Os muestro por ejemplo los datos de un producto concreto :
SELECT * FROM ps_product_tag_special ts WHERE id_product=200000102

me devuelve :
id_product   id_tag_special
200000102   1
200000102   8
200000102   14
200000102   15

Quiero por ejemplo una SQL (MYSQL) que me devuelva los id_product  que tengan en su id_tag_special tanto el 8 como el 15.

Lo he intentado con la query :
SELECT DISTINCT(ts.id_product)
FROM ps_product_tag_special ts
WHERE ts.id_tag_special IN (8,15)

pero no me sirve porque me devuelve los id_product que tengan 8 o 15. 
Yo quiero la operación sea un AND y no un OR.

¿alguna sugerencia? Gracias