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

Problemas con un select

Estas en el tema de Problemas con un select en el foro de Mysql en Foros del Web. Hola Amigos!! estoy totalmente desconcertado porque al hacer un select me muestra lo que no quiero que me muestre y la verdad recurro a ustedes ...
  #1 (permalink)  
Antiguo 03/01/2012, 07:14
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 557
Antigüedad: 13 años, 6 meses
Puntos: 4
Problemas con un select

Hola Amigos!!
estoy totalmente desconcertado porque al hacer un select me muestra lo que no quiero que me muestre y la verdad recurro a ustedes porque no se que pueda ser
la estructura de mi tabla es esta
Código MySQL:
Ver original
  1. CREATE TABLE `categorias` (
  2.   `cat_id` int(11) NOT NULL auto_increment,
  3.   `categoria_id` varchar(100) default NULL,
  4.   `categoria_detalle` varchar(100) default NULL,
  5.   `categoria_asoc` int(11) default NULL,
  6.   KEY `cat_id` (`cat_id`),
  7.   KEY `categoria_id` (`categoria_id`)
  8.  
  9. --
  10. -- Volcar la base de datos para la tabla `categorias`
  11. --
  12.  
  13. INSERT INTO `categorias` VALUES (1, '1', 'Impresoras', 0);
  14. INSERT INTO `categorias` VALUES (3, '2', 'Monitores', 0);
  15. INSERT INTO `categorias` VALUES (5, '3', 'Notebooks', 0);
  16. INSERT INTO `categorias` VALUES (7, '4', 'Desktops', 0);
  17. INSERT INTO `categorias` VALUES (9, '5', 'Placas de Video', 0);
  18. INSERT INTO `categorias` VALUES (11, '6', 'Hogar Y Oficina', 0);
  19. INSERT INTO `categorias` VALUES (13, '7', 'MotherBoards', 0);
  20. INSERT INTO `categorias` VALUES (15, '8', 'Placas de Sonido', 0);
  21. INSERT INTO `categorias` VALUES (17, '9', 'Procesadores', 0);
  22. INSERT INTO `categorias` VALUES (19, '10', 'Inyeccion de Tinta', 1);
  23. INSERT INTO `categorias` VALUES (21, '11', 'Laser', 1);
  24. INSERT INTO `categorias` VALUES (23, '12', 'LCD', 3);
  25. INSERT INTO `categorias` VALUES (25, '13', 'LED', 3);
  26. INSERT INTO `categorias` VALUES (27, '14', 'Multifuncion', 1);
  27. INSERT INTO `categorias` VALUES (29, '15', 'Plasma', 3);
  28. INSERT INTO `categorias` VALUES (31, '16', 'ALL IN ONE', 7);
  29. INSERT INTO `categorias` VALUES (33, '17', 'Convencionales', 7);
  30. INSERT INTO `categorias` VALUES (35, '18', '15.6 Pulgadas', 5);
  31. INSERT INTO `categorias` VALUES (37, '19', 'PCI-E', 9);
  32. INSERT INTO `categorias` VALUES (39, '20', 'AGP', 9);
  33. INSERT INTO `categorias` VALUES (41, '21', 'Proyectores', 11);
  34. INSERT INTO `categorias` VALUES (43, '22', 'Socket 775', 13);
  35. INSERT INTO `categorias` VALUES (45, '23', 'Socket AM3', 13);
  36. INSERT INTO `categorias` VALUES (47, '24', 'Sound Blaster 5.0', 15);
y la consulta es asi
Código SQL:
Ver original
  1. SELECT * FROM categorias R WHERE R.categoria_asoc = 0 AND R.categoria_id LIKE '$nombre_rubro%' OR R.categoria_detalle LIKE '$nombre_rubro%'
  2.                                                        ORDER BY R.categoria_id ASC LIMIT 0, 10
le estoy diciendo que selecione donde categoria _asoc = 0 pero el problema es que me trae todo , donde categoria_asoc es igual a 0 y en donde es diferente de 0
saludos y muchas gracias por cualquier ayuda!!!
  #2 (permalink)  
Antiguo 03/01/2012, 07:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Problemas con un select

El problema está el el OR que has puesto. En ese punto, la operación se interpreta que traiga los registros donde se cumple:
Código MySQL:
Ver original
  1. R.categoria_asoc = 0 AND R.categoria_id LIKE '$nombre_rubro%'
o que traiga los registros donde se cumpla:
Código MySQL:
Ver original
  1. R.categoria_detalle LIKE '$nombre_rubro%'

Para que se interprete correctamente, la condición debe ser encerrada entre paréntesis. Los paréntesis se usan para establecer el orden de evaluación lógica de una proposición:

Código MySQL:
Ver original
  1. R.categoria_asoc = 0 AND
  2. (R.categoria_id LIKE '$nombre_rubro%' OR R.categoria_detalle LIKE '$nombre_rubro%')
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 03/01/2012, 07:27
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 557
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: Problemas con un select

SOS UN CAPO
cuando sea grande quiero ser como vos!!!
jajajaja
Saludos Y muchas gracias!!!
  #4 (permalink)  
Antiguo 03/01/2012, 08:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Problemas con un select

Por nada.

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 03/01/2012, 11:17
Avatar de azimutisima  
Fecha de Ingreso: mayo-2011
Mensajes: 107
Antigüedad: 13 años
Puntos: 14
Respuesta: Problemas con un select

Clasico, clasico, el que no le haya pasado miente seguro,jejeje.

Cuando mezclas AND y OR los OR SIEMPRE SIEMPRE DEBEN DE IR ENTRE PARENTESIS, sino se pasa el AND por el forro.

jejeej, me hizo gracia pq a mi me pasa a veces y mira que hago sql's!!!!
__________________
Si te gusto mi respuesta anímame a continuar dandome un voto.
  #6 (permalink)  
Antiguo 03/01/2012, 11:58
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 557
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: Problemas con un select

jajajaj!!!
Saludos!!!
  #7 (permalink)  
Antiguo 03/01/2012, 12:06
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Problemas con un select

Hola a todos:

No estoy de acuerdo con el comentario que pone azimutisima.

Cita:
Cuando mezclas AND y OR los OR SIEMPRE SIEMPRE DEBEN DE IR ENTRE PARENTESIS, sino se pasa el AND por el forro
No en todos los casos en los que utilices AND y OR debes utilizar paréntesis... El problema se resuelve poniendo paréntesis, pero creo que no se ha entendido correctamente qué es lo que está pasando.

En los operadores lógicos (AND, OR, NOT) así como en los matemáticos (+, -, /, *) existe una JERARQUÍA, es decir, un orden en que se evalúa una expresión.

En matemáticas, no es lo mismo 1+3*5 que (1+3)*5

Código:
1 + 3 * 5  = 16
--> la multiplicación tiene mayor jerarquía que la suma, por lo tanto se evalua primero 3*5 y después se suma 1.

Código:
(1 + 3) * 5 = 20
--> las operaciones entre paréntesis tienen más jerarquía que el resto, por lo tanto se evalúa primero 1 + 3 y después se multiplica por 5.

Con los operarodes lógicos NOT es el de mayor jerarquía, seguido por AND y OR como último... De la manera en que estaba colocando Tal y como estaba colocando la condición tumbero_x

Código:
WHERE 
R.categoria_asoc = 0 AND 
R.categoria_id LIKE '$nombre_rubro%' 
OR R.categoria_detalle LIKE '$nombre_rubro%'
El operador AND se ejecuta primero... en otras palabras sería el equivalente a poner esto:

Código:
WHERE 
(R.categoria_asoc = 0 AND 
R.categoria_id LIKE '$nombre_rubro%' )
OR R.categoria_detalle LIKE '$nombre_rubro%'
Por lo tanto, hay que tener cuidado en cuando usar o no paréntesis y no tomarlo como regla general.

Saludos
Leo.
  #8 (permalink)  
Antiguo 03/01/2012, 12:10
 
Fecha de Ingreso: octubre-2010
Ubicación: Buenos Aires
Mensajes: 557
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: Problemas con un select

Hola leonardo_josue
MUY BIEN EXPLICADO , todas mis dudas se aclararon
SAludos!!!!
  #9 (permalink)  
Antiguo 04/01/2012, 04:13
Avatar de azimutisima  
Fecha de Ingreso: mayo-2011
Mensajes: 107
Antigüedad: 13 años
Puntos: 14
Respuesta: Problemas con un select

Bueno pues eso, tiene que ir entre parentesis... si los pones los or entre parentesis SIEMPRE ,nunca van a hacer otra cosa que lo que esperas, claro no se debe tomar como normal general NADA sin antes saber lo que estas haciendo.
__________________
Si te gusto mi respuesta anímame a continuar dandome un voto.

Etiquetas: select, tabla
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 16:40.