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

Buscar una variable en varios campos

Estas en el tema de Buscar una variable en varios campos en el foro de Mysql en Foros del Web. Tengo por ej la siguiente cadena "Select * From Pedimento Where EstadoCivil LIKE '%$Civil%' AND Preferencias LIKE '%$preferencias%'; Pero imaginen que $preferencias quiero buscar si ...
  #1 (permalink)  
Antiguo 01/11/2012, 11:50
 
Fecha de Ingreso: diciembre-2008
Mensajes: 738
Antigüedad: 15 años, 5 meses
Puntos: 15
Buscar una variable en varios campos

Tengo por ej la siguiente cadena

"Select * From Pedimento Where EstadoCivil LIKE '%$Civil%' AND Preferencias LIKE '%$preferencias%';

Pero imaginen que $preferencias quiero buscar si se encuentra en alguno de varios campos de la tabla, en cualquiera de ellos. Por ejemplo, quisiera saber si $preferencias se encuentra en "PREFERENCIA1", "PREFERENCIA2" o "PREFERENCIA3". ¿Cómo puedo hacer esa búsqueda?
  #2 (permalink)  
Antiguo 01/11/2012, 12:07
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Buscar una variable en varios campos

(Preferencia1 LIKE '%$preferencias%'
OR
Preferencia2 LIKE '%$preferencias%'
OR
Preferencia3 LIKE '%$preferencias%'
OR
...)
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 01/11/2012, 12:11
 
Fecha de Ingreso: diciembre-2008
Mensajes: 738
Antigüedad: 15 años, 5 meses
Puntos: 15
Respuesta: Buscar una variable en varios campos

Muchas gracias, lo probaré. ¿Y esos paréntesis van así también?
  #4 (permalink)  
Antiguo 01/11/2012, 12:21
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Buscar una variable en varios campos

Si hacen falta los parentesis si vas a combinar con AND puesto que no es lo mismo

P and J OR H = (P and J) OR H

que

P and (J OR H)

Por prioridad de operadores.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 01/11/2012, 12:30
 
Fecha de Ingreso: diciembre-2008
Mensajes: 738
Antigüedad: 15 años, 5 meses
Puntos: 15
Respuesta: Buscar una variable en varios campos

Pero aquí como sería. ¿Así?:

"Select * From Pedimento Where EstadoCivil LIKE '%$Civil%' AND (Preferencia1 LIKE '%$preferencias%'
OR
Preferencia2 LIKE '%$preferencias%'
OR
Preferencia3 LIKE '%$preferencias%'
)
  #6 (permalink)  
Antiguo 01/11/2012, 12:57
 
Fecha de Ingreso: diciembre-2008
Mensajes: 738
Antigüedad: 15 años, 5 meses
Puntos: 15
Respuesta: Buscar una variable en varios campos

Lo puse así y nada más no me funciona lo que está dentro del paréntesis:

Código MySQL:
Ver original
  1. SELECT * FROM wp_consultte
  2.      EstadoCivil = '$Civil'
  3.      AND (OPC = '$Especialidad' OR
  4.      OPD = '$Especialidad' OR
  5.      OSP = '$Especialidad' OR
  6.      Comisiones = '$Especialidad' OR
  7.      Regulaciones = '$Especialidad' OR
  8.      Programas = '$Especialidad' OR
  9.      Regimenes = '$Especialidad' OR
  10.      Ordenamiento = '$Especialidad' OR
  11.      Negociadores = '$Especialidad' OR
  12.      Logistica = '$Especialidad'
  13.      );

Última edición por gnzsoloyo; 01/11/2012 a las 13:29 Razón: Etiqueta equivocada
  #7 (permalink)  
Antiguo 01/11/2012, 13:33
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Buscar una variable en varios campos

Eso da lo que cumpla civil y una o mas de las otras....

no se exactamente lo que buscas

si buscas que sea civil o alguna de las otras luego quita el AND y pon un OR y quita los parentesis....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 01/11/2012 a las 13:41
  #8 (permalink)  
Antiguo 01/11/2012, 13:47
 
Fecha de Ingreso: diciembre-2008
Mensajes: 738
Antigüedad: 15 años, 5 meses
Puntos: 15
Respuesta: Buscar una variable en varios campos

No, busco que civil se cumpla. Los que son opcionales son los paréntesis.

Me pasaron este código más limpio se supone pero sigue sin funcionar. Me aparece como si siempre se cumpliera la función:

SELECT *
FROM wp_consultte
WHERE genero = '$Sexo'
OR estadocivil = '$Civil'
AND '$Especialidad' in (opc, opd, osp, comisiones, ...)
  #9 (permalink)  
Antiguo 02/11/2012, 06:44
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Buscar una variable en varios campos

Debes dar un repaso a la logica

A o B y C dará registros donde se cumpla A (solo A) y registros donde se cumplan B y C (los dos), igual que A o (B y C)

(A o B) y C dará registros donde se cumplan A o B (uno o los dos) y que tambien cumplan C
No dará aquellos registros que no cumplan ni A ni B pase lo que pase con C.
Tampoco dará aquellos que cumpliendo A o B no cumplan C

A partir de esto debes analizar lo que estas buscando que cumpla tu selección.

Es lo mismo que pasa en matematicas

2 + 3 * 5 = 17
2 + (3 * 5) = 17
(2 + 3) * 5 = 25

En cuanto a IN

campo1=10 OR campo1=12 OR campo1=14

es lo mismo que

campo1 IN (10,12,14)

http://dev.mysql.com/doc/refman/5.0/...ubqueries.html

El uso que propones

valor IN (...lista de campos...)

no se deriva de lo que dice el manual


Cita:
expr IN (value,...)

Retorna 1 si expr es uno de los valores en la lista IN , de lo contrario retorna 0. Si todos los valores son constantes, se evalúan según el tipo y ordenación de expr . La búsqueda para el elemento se hace usando búsqueda binaria. Esto significa que IN es muy rápido si la lista IN consiste enteramente en constantes. Si expr es una expresión de cadenas de caracteres sensible a mayúsculas, la comparación de cadenas se realiza sensible a mayúsculas.

mysql> SELECT 2 IN (0,3,5,'wefwf');
-> 0
mysql> SELECT 'wefwf' IN (0,3,5,'wefwf');
-> 1

El número de valores en la lista IN sólo está limitado por el valor max_allowed_packet.

En MySQL 5.0, para cumplir el estándar SQL IN retorna NULL no sólo si la expresión de la parte izquierda es NULL, también si no encuentra coincidencias en la lista y una de las expresiones en la lista es NULL.

La sintaxis de IN() puede usarse para escribir algunas subconsultas. Consulte Sección 13.2.8.3, “Subconsultas con ANY, IN y SOME”.

expr NOT IN (value,...)

Esto es lo mismo que NOT (expr IN (value,...)).
Pero si funciona ciertamente parece una sintaxis mas clara para este caso....

Pero fijate bien en lo que dice

...IN retorna NULL ... si ...una de las expresiones en la lista es NULL...

Es decir va a fallar la busqueda si un campo de la lista es nulo. Eso a mi entender invalida el uso de esta sintaxis excepto claro que todos los campos de la lista sean NOT NULL por defecto.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 02/11/2012 a las 07:00

Etiquetas: campos, select, tabla, variables
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 14:14.