Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Un rango utilizando LIKE

Estas en el tema de Un rango utilizando LIKE en el foro de Mysql en Foros del Web. Amigos necesito ayuda por favor. Estoy tratando de hacer una consulta que me arroje todos los nombres que empiecen con a, b y c. Pero ...
  #1 (permalink)  
Antiguo 01/02/2011, 21:45
 
Fecha de Ingreso: septiembre-2009
Ubicación: Grecia, Costa Rica
Mensajes: 20
Antigüedad: 14 años, 7 meses
Puntos: 0
Un rango utilizando LIKE

Amigos necesito ayuda por favor.

Estoy tratando de hacer una consulta que me arroje todos los nombres que empiecen con a, b y c. Pero no me funciona.

En teoría debería funcionar, pero no lo hace: la sintaxis que estoy utilizando es:


"SELECT * FROM productos WHERE campo LIKE '[a-c]%' " ;

y concretamente lo estoy utilizando en esta consulta:

$query_productos = "SELECT * FROM productos WHERE categoria = '$valor' AND disponible = 'S' Nombre LIKE '[a-c]%' order by Nombre ASC" ;

Si lo hago de la siguiente forma funciona:

"SELECT * FROM productos WHERE campo LIKE 'a%' " ;

pero solo me sirve para obtener los nombres que empiezan con una letra a la vez y lo que necesito es obtener los nombres que empiecen con las tres letras a la vez.

De antemano gracias por la ayuda!!
  #2 (permalink)  
Antiguo 02/02/2011, 00:19
Avatar de lair  
Fecha de Ingreso: enero-2009
Ubicación: header('Location: Morelia");
Mensajes: 1.052
Antigüedad: 15 años, 3 meses
Puntos: 46
Respuesta: Un rango utilizando LIKE

Hola.

Prueba con la funcion regexp

Código MySQL:
Ver original
  1. SELECT * FROM productos WHERE campo regexp '^[a-c]'

Suerte.
  #3 (permalink)  
Antiguo 03/02/2011, 09:20
 
Fecha de Ingreso: septiembre-2009
Ubicación: Grecia, Costa Rica
Mensajes: 20
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Un rango utilizando LIKE

Gracias Lair por tu pronta respuesta, pero tampoco me funcionó REGEXP, me sucede igual, si lo uso con una sola letra si funciona, pero con el conjunto a-c no.

Sera algún problema de sintaxis por la versión de mysql que tengo?

5.0.91-community
  #4 (permalink)  
Antiguo 03/02/2011, 09:37
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Un rango utilizando LIKE

"SELECT * FROM productos WHERE campo LIKE 'a%' OR campo LIKE 'b%' OR campo LIKE 'c%' ORDER BY campo " ;
  #5 (permalink)  
Antiguo 03/02/2011, 10:07
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Un rango utilizando LIKE

Hola Allan_mo:

No entiendo por qué dices que no te sirvió la expresión regular que te propone lair... tal cual debería funcionar:
Código MySQL:
Ver original
  1. mysql> #creamos una tabla de pruebas
  2. mysql> create table `pruebas`.`productos` (  `id_producto` int UNSIGNED NOT NULL
  3.  AUTO_INCREMENT , `nombre` varchar (50) NOT NULL , PRIMARY KEY (`id_producto`));
  4.  
  5. Query OK, 0 rows affected (0.06 sec)
  6.  
  7. mysql> #insertamos algunos valores de prueba
  8. mysql> insert into `productos`(`id_producto`,`nombre`) values (NULL, 'arroz'),(N
  9. ULL, 'bolsa'), (NULL,'carne'), (NULL,'dulces'), (NULL,'elotes');
  10. Query OK, 5 rows affected (0.03 sec)
  11. Records: 5  Duplicates: 0  Warnings: 0
  12.  
  13. mysql> #sin expresión regular
  14. mysql> select * from `pruebas`.`productos`;
  15. +-------------+--------+
  16. | id_producto | nombre |
  17. +-------------+--------+
  18. |           1 | arroz  |
  19. |           2 | bolsa  |
  20. |           3 | carne  |
  21. |           4 | dulces |
  22. |           5 | elotes |
  23. +-------------+--------+
  24. 5 rows in set (0.00 sec)
  25.  
  26. mysql> #con expresion regular
  27. mysql> select * from `pruebas`.`productos` where nombre REGEXP '^[a-c]';
  28. +-------------+--------+
  29. | id_producto | nombre |
  30. +-------------+--------+
  31. |           1 | arroz  |
  32. |           2 | bolsa  |
  33. |           3 | carne  |
  34. +-------------+--------+
  35. 3 rows in set (0.00 sec)
  36.  
  37. mysql>

La expresión regular sólo está considerando letras minúsculas, si tus productos vienen con mayúsculas debes incluirlas también en el rango.

La solución de jurena también debería de funcionar, pero igualmente considera sólo la aparición de minúsculas.

Saludos
Leo.
  #6 (permalink)  
Antiguo 03/02/2011, 12:45
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Un rango utilizando LIKE

Sí, regexp también funcionará. Y para recoger mayúsculas y minúsculas con la propuesta que te hice, habría que usar un cotejamiento del tipo ci, es decir, case insensitive para el campo que desees ordenar así, pero, claro, esto también afectará a otras consultas.
  #7 (permalink)  
Antiguo 03/02/2011, 17:44
Avatar de lair  
Fecha de Ingreso: enero-2009
Ubicación: header('Location: Morelia");
Mensajes: 1.052
Antigüedad: 15 años, 3 meses
Puntos: 46
Respuesta: Un rango utilizando LIKE

Cita:
Iniciado por Allan_Mo Ver Mensaje
si lo uso con una sola letra si funciona, pero con el conjunto a-c no
Plantea de una forma mas explicita tu problema por que leonardo_josue hizo (segun yo) lo que necesitas.
o pon el codigo que tienes para ver donde esta el error

Saludos.

Etiquetas: rango
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:47.