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

Consulta LIKE no funciona

Estas en el tema de Consulta LIKE no funciona en el foro de Bases de Datos General en Foros del Web. Saludos. Espero que este tema vaya aqui. Al hacer una consulta a la tabla que tiene por valores en los campos de: A-01 A-02 A-03 ...
  #1 (permalink)  
Antiguo 07/05/2010, 07:37
 
Fecha de Ingreso: julio-2009
Mensajes: 52
Antigüedad: 14 años, 9 meses
Puntos: 4
Consulta LIKE no funciona

Saludos.

Espero que este tema vaya aqui. Al hacer una consulta a la tabla que tiene por valores en los campos de:
A-01
A-02
A-03
etc, pero existen en campos donde es
A-03B
y otros como
A-04, A-05, A-06
y asi tengo varios campos.

Mi consulta la realizo de la siguiente manera, para detectar un campo con A-07

Código PHP:
$campo 'A-03';
$sql "SELECT * FROM tabla WHERE campo LIKE '$campo' OR campo LIKE '%$campo%' ORDER BY campo2 DESC"
el resultado me regresa A-03B, lo que yo quiciera es que me regrese el A-03, la consulta la realizo de esta manera, para cuando necesito buscar un campo intermedi en este caso A-05.

No se si tengo mal estructurada la consulta, pero no me funcionan los OR, he intentado ponerlos en parentesis, poner que busque primero el campo intermedio, etc etc ya estoy , si alguien me puede ayudar o explicarme que hago mal, de antemano se agradece la ayuda.
  #2 (permalink)  
Antiguo 07/05/2010, 07:48
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: Consulta LIKE no funciona

El problema puede venir o por el lado de el CHARSET, o bien por el contenido de las variables, ya que si creo un ejemplo parecido:
[/HIGHLIGHT]
[HIGHLIGHT="MySQL"]
Código MySQL:
Ver original 
Código MySQL:
Ver original
  1. VALUES('A-01)'),
  2.     ('A-02'),
  3.     ('A-03'),
  4.     ('A-03A'),
  5.     ('A-03B'),
  6.     ('A-04'),
  7.     ('A-05'),
  8.     ('A-06'),
  9.     ('A-07'),
  10.     ('A-07B');
Código MySQL:
Ver original
  1. FROM XX
  2. WHERE ID LIKE 'A-03%' OR ID LIKE '%7%';
Obtengo:
Código MySQL:
Ver original
  1. +-------+
  2. | ID    |
  3. +-------+
  4. | A-03  |
  5. | A-03A |
  6. | A-03B |
  7. | A-07  |
  8. | A-07B |
  9. +-------+
  10. 5 rows in set (0.00 sec)
Comp pues apreciar, no es un problema de OR ni de LIKE,así que el inconveniente debe estar en otra parte.
__________________
¿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 07/05/2010, 07:50
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta LIKE no funciona

Cita:
Consulta LIKE no funciona
Like si funciona Solo debes utilizarlo adecuadamente.

Cita:
WHERE campo LIKE '$campo' OR campo LIKE '%$campo%'
Cuando haces esto, siempre se va a realizar la segunda opción, ya que esta incluye la primera, por lo que la primera condición es innecesaria.

Según entiendo, quieres que al buscar la palabra A-03, no te retorne el A-03B, pero que la consulta quede abierta por si alguien quiere buscar el A-05 y también lo encuentre.

Entonces.. una posible solución (Tu diras si sirve) es comparar unicamente los primeros 4 digitos del campo para ignorar el ultimo digito (B)

Prueba de esta forma.

Código MySQL:
Ver original
  1. tabla
  2. LEFT(campo,4) LIKE '%$campo%'
  3. ORDER BY campo2 DESC

Lógicamente, si tienes valores con mas dígitos en este campo puede presentar fallas.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #4 (permalink)  
Antiguo 07/05/2010, 08:19
 
Fecha de Ingreso: julio-2009
Mensajes: 52
Antigüedad: 14 años, 9 meses
Puntos: 4
Respuesta: Consulta LIKE no funciona

Muchas gracias a los dos por responder, me aclararon algunas dudas, igual no me supe explicar el porque la consulta de esta manera o porque la puse asi.

en un campo tengo estos valores, cada fila es lo que esta guardado en el campo de la bbdd
fila1 -> A-01
fila2 -> A-02
fila3 -> A-03
fila4 -> A-03A
fila5 -> A-03B
fila6 -> A-04,A-05,A-06
fila7 -> A-07
fila8 -> A-07A

recibo la variable de parte del cliente, entonces es lo que tengo que comparar, en este caso siempre seria lo mismo a buscar A-03, pero me muestra todo lo que tiene A-03, A-03A, A-03B, como bien dices gnzsoloyo, pero si el cliente selcciona A-05 que es un valor intermedio, por eso pense que con el like funcionaria.
  #5 (permalink)  
Antiguo 07/05/2010, 08:24
 
Fecha de Ingreso: julio-2009
Mensajes: 52
Antigüedad: 14 años, 9 meses
Puntos: 4
Respuesta: Consulta LIKE no funciona

Espero no haberlo enredado mas, "recibo la variable de parte del cliente, entonces es lo que tengo que comparar, en este caso siempre seria lo mismo a buscar A-03", esto en la misma consulta.
  #6 (permalink)  
Antiguo 07/05/2010, 08:27
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: Consulta LIKE no funciona

Lo que puedes usar son expresiones regulares, entonces, para habilitar o restringir la búsqueda, pero en definitiva puede volverse algo complicado.
Por otro lado, si en cada fila guardas un grupo de valores, estás generando un campo multivaluado, lo que es una grave violación al modelo relacional. Te conviene normalizar y no generar ese tipo de datos "basura".
La frase no es peyorativa; se los denomina así porque generan información con "ruido", difícil, cuando no imposible, de analizar sin algoritmos innecesariamente complejos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 07/05/2010, 08:27
 
Fecha de Ingreso: julio-2009
Mensajes: 52
Antigüedad: 14 años, 9 meses
Puntos: 4
Respuesta: Consulta LIKE no funciona

Cita:
Iniciado por franjalafa Ver Mensaje
Espero no haberlo enredado mas, "recibo la variable de parte del cliente, entonces es lo que tengo que comparar, en este caso siempre seria lo mismo a buscar A-03", esto en la misma consulta.
otra consulta puede ser al A-05, pero como es intermedio si se pone como dices huesos52, no lo encontraria por que no es el primer campo de cuatro, en este caso es A-04
  #8 (permalink)  
Antiguo 07/05/2010, 08:35
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta LIKE no funciona

Estoy totalmente deacuerdo con gnzsoloyo acerca de normalizar la base de datos y eliminar registros basura difícilmente administrables.


Sin embargo, esto también te puede servir.

Código MySQL:
Ver original
  1. mysql> select campo from franjalafa;
  2. +----------------+
  3. | campo          |
  4. +----------------+
  5. | A-01           |
  6. | A-02           |
  7. | A-03           |
  8. | A-03A          |
  9. | A-03B          |
  10. | A-04,A-05,A-06 |
  11. | A-07           |
  12. | A-07A          |
  13. +----------------+
  14. 8 rows in set (0.00 sec)
  15.  
  16. mysql> select campo from franjalafa where find_in_set('A-05',campo);
  17. +----------------+
  18. | campo          |
  19. +----------------+
  20. | A-04,A-05,A-06 |
  21. +----------------+
  22. 1 row in set (0.00 sec)
  23.  
  24. mysql> select campo from franjalafa where find_in_set('A-03',campo);
  25. +-------+
  26. | campo |
  27. +-------+
  28. | A-03  |
  29. +-------+
  30. 1 row in set (0.00 sec)

Repito... tu mejor opción es normalizar.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #9 (permalink)  
Antiguo 07/05/2010, 08:38
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: Consulta LIKE no funciona

Yo siempre me olvido de esa función...


Buena idea.

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 07/05/2010, 08:47
 
Fecha de Ingreso: julio-2009
Mensajes: 52
Antigüedad: 14 años, 9 meses
Puntos: 4
Respuesta: Consulta LIKE no funciona

Muchisimas gracias a los dos, me han ayudado mucho, referente el porque los campos aparecen asi es por que son locales de una plaza entonces cuando tiene rentados tres son los que se asignan ejem: A-04, A-05, A-06, pero los administradores de la plaza al local le ponen A-05, entonces cuando quieren hacer consulta de este local lo buscan por A-05.

La tabla ya esta hecha para el sistema local, yo solo estoy consultando datos para mostrarlos a una pagina web como reportes. En este caso no lo podria mover ya que el sistema local podra dejar de funcionar. (no realizado por mi).

Pero los comentarios y observaciones que me hacen, las tomare en cuenta para desarrollos futuros muchas gracias. Creo que probare la opcion que me das huesos52 y les avisare que tal me va.
  #11 (permalink)  
Antiguo 08/05/2010, 07:31
 
Fecha de Ingreso: julio-2009
Mensajes: 52
Antigüedad: 14 años, 9 meses
Puntos: 4
Respuesta: Consulta LIKE no funciona

Saludos.

He probado con el ejemplo de huesos52 (find_in_set), estube leyendo y funciona solamente con un campo tipo SET, yo lo tengo en varchar.

El problema que si lo cambio a SET, tengo que poner los valores por default, A-01, A-02, etc, pero si el cliente da de alta otro no lo va a poder registrar, ya que si no esta en la lista no se puede agregar.

Gracias y seguire buscando otra opción que me pueda funcionar o como dicen Uds tendre que normaliar el campo para poder realizar la consulta segun lo que necesite.
  #12 (permalink)  
Antiguo 08/05/2010, 08:54
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Consulta LIKE no funciona

franjalafa,
en primer lugar, suscribo las palabras de gnzsoloyo y huesos52 respecto a la normalización, y en segundo, también respecto a sus propuestas. Y te diré además que find_in_set puede utilizarse sobre otro campo que no sea de tipo SET siempre que cuando quieras separar datos lo hagas con coma (,). Creo que no lo has probado bien. Por otra parte, si no separas con coma, podrías usar una expresión regular como te proponía gnzsoloyo. Naturalmente, también podrías usarla aunque separes con coma.
Código MySQL:
Ver original
  1. SELECT campo FROM tutabla WHERE campo REGEXP '[[:<:]]A-03[[:>:]]'
Dinos cómo has probado FIND_IN_SET, la sintaxis utilizada y el resultado obtenido.
  #13 (permalink)  
Antiguo 08/05/2010, 09:55
 
Fecha de Ingreso: julio-2009
Mensajes: 52
Antigüedad: 14 años, 9 meses
Puntos: 4
Respuesta: Consulta LIKE no funciona

Gracias jurena.

Decidí normalizar todo, sin que afectara el funcionamiento a la base de datos.

la consulta la hacia de la sigueinte manera:

$sql = "SELECT * FROM tabla WHERE FIND_IN_SET ('$var', campo)";
  #14 (permalink)  
Antiguo 09/05/2010, 05:41
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Consulta LIKE no funciona

me temo, entonces que tu error era más un problema de PHP, porque esa consulta, salvo en el modo en que pones entre comillas la variable parece estar bien. También podrías usar

SELECT * FROM tabla WHERE FIND_IN_SET (@variable, campo) > 0
te pongo sólo la sintaxis SQL

saludos.
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 12:20.