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

Where con like y select

Estas en el tema de Where con like y select en el foro de Mysql en Foros del Web. Necesito una consulta donde el WHERE es un like (otro select SELECT), pero la SQL me da error. Como se haria la parte que me ...
  #1 (permalink)  
Antiguo 19/05/2011, 05:09
Avatar de izar  
Fecha de Ingreso: enero-2004
Mensajes: 519
Antigüedad: 20 años, 2 meses
Puntos: 1
Where con like y select

Necesito una consulta donde el WHERE es un like (otro select SELECT), pero la SQL me da error. Como se haria

la parte que me da error esta en negrita

Código:
	  $extra_fields_query = tep_db_query("SELECT * 
						FROM " . TABLE_PRODUCTS_EXTRA_FIELDS . " pef 
						WHERE category_id like '%" . $current_category_id .",%'   
						OR category_id=". $current_category_id ."  
						OR category_id='all'
						OR pef.category_id=(SELECT c.parent_id FROM " . TABLE_CATEGORIES . " as c WHERE c.categories_id =".$current_category_id .")   
						OR pef.category_id like'% (SELECT c.parent_id FROM " . TABLE_CATEGORIES . " as c WHERE c.categories_id =".$current_category_id .")%'   
						ORDER BY products_extra_fields_order");
Gracias de antemano.
  #2 (permalink)  
Antiguo 19/05/2011, 05:22
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, 4 meses
Puntos: 2658
Respuesta: Where con like y select

Mira, yo a la consulta la veo innecesariamente complicada, pero como es muy dependiente de las variables, sin los valores entrantes no se sabe cómo queda finalmente escrita y sin eso no es posible saber si el error es de sintaxis, de lógica, o de restricciones.
Sería buena idea que cuando digas que algo te da error, escribas claramente que error te está dando, porque desde la consulta a veces no se puede determinar eso (sólo si fuera sintáctico, y sin las variables).

Tips:
- LIKE se usa para comparar cadenas. Si lo quieres usar para comparar valores numéricos los resultados pueden ser erróneos. Para eso se usan rangos (BETWEEN, IN(), etc), no LIKE.
- Trata de no usar subconsultas que devuelvan un único valor en el WHERE. Los WHERE se procesan por cada registro obtenido en la selección base, por lo que si devolviese 10.000 registros, esas subconsultas se ejecutarán 10.000 veces. Es más eficiente hacer una consulta para obtener los valores y luego ponerlos en la consulta mayor.
__________________
¿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 30/05/2011, 07:17
Avatar de izar  
Fecha de Ingreso: enero-2004
Mensajes: 519
Antigüedad: 20 años, 2 meses
Puntos: 1
Respuesta: Where con like y select

pef.idcategory es string

  #4 (permalink)  
Antiguo 30/05/2011, 07:22
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, 4 meses
Puntos: 2658
Respuesta: Where con like y select

¿Estás poniendo una lista de valores en esa columna?
Si la respuesta es si, desde ya te digo que tienes un serio problema de diseño...
Para decirtelo en pocas palabras: Según el modelo E-R, los campos multivaluados no existen, no se admiten en el modelo, y en tu caso provocan un serio problema en la consulta.
Un campo multivaluado implica una relación N:N entre dos entidades, y eso significa que debe forzosamente existir una tercera tabla que administre esa relación. Cualquier otra cosa viola el modelo y trae problemas en las consultas (sin hablar de los problemas de integridad y consistencia).
__________________
¿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 30/05/2011, 08:20
Avatar de izar  
Fecha de Ingreso: enero-2004
Mensajes: 519
Antigüedad: 20 años, 2 meses
Puntos: 1
Respuesta: Where con like y select

es una contribucion de OsCommerce. No es diseño mío :) asi que eso no lo puedo arreglar.

En fin.
  #6 (permalink)  
Antiguo 30/05/2011, 08:29
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, 4 meses
Puntos: 2658
Respuesta: Where con like y select

Entonces no uses LIKE contra ese campo. Usa FIND_IN_SET(), que te permite buscar un valor dado en un string donde los valores estén separados por comas.
Por detalles consulta el manual de referencia: MySQL 5.0 Reference Manual :: 12 Funciones y operadores :: 12.3 Funciones para cadenas de caracteres

P.D.: No sabía ni me imaginaba que OSComerce estuviese tan mal diseñado. Eso es basura pura, en grado superlativo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: php
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 15:22.