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

[SOLUCIONADO] Problema con string en clausula in

Estas en el tema de Problema con string en clausula in en el foro de Mysql en Foros del Web. Hola a todos, Estoy intentando hacer una consulta del tipo @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original SELECT presupuestos.id_presupuesto , ( SELECT group_concat ( DISTINCT extra ...
  #1 (permalink)  
Antiguo 12/06/2013, 05:56
 
Fecha de Ingreso: junio-2002
Mensajes: 93
Antigüedad: 21 años, 10 meses
Puntos: 0
Problema con string en clausula in

Hola a todos,

Estoy intentando hacer una consulta del tipo

Código MySQL:
Ver original
  1. SELECT presupuestos.id_presupuesto,
  2. (SELECT group_concat( DISTINCT extra SEPARATOR ',' )
  3. FROM extras
  4. WHERE id_extras IN (presupuestos.extras)) as extras
  5. FROM presupuestos
La consulta no se ejecuta correctamente porque presupuestos extras tiene el valor '1,2,3,5,15' y mysql lo trunca a 1

El valor adecuado para presupuestos.extras debiera ser 1,2,3,4,5 (sin las comillas simples), pero en la tabla se almacena como string.

Tenéis alguna sugerencia para que la clausula in evalue ese string adecuadamente?

Gracias
  #2 (permalink)  
Antiguo 12/06/2013, 06:02
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: Problema con string en clausula in

Lo que tienes, de entrada, es un espantoso diseño de datos. Por lo que describes el campo "extras" es un campo multivaluado, que representa una relación 1:N entre una tabla y si misma... lo que está estrictamente prohibido en el modelo relacional y las bases de datos relacionales.
Esa relación requiere una tabla relaciona que vincule el registro de la tabla con los restantes "extras" que tenga.
Así como está, eso no tiene solución posible, y por lo visto tampoco estás entendiendo el uso de GROUP_CONCAT().

¿Es así? ¿Tienes todos esos valores metidos en un campo?
__________________
¿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 12/06/2013, 08:07
 
Fecha de Ingreso: junio-2002
Mensajes: 93
Antigüedad: 21 años, 10 meses
Puntos: 0
Respuesta: Problema con string en clausula in

Los valores de ese campo son los indices seleccionados de otra tabla.

Ya se que no se eligió la mejor forma de hacerlo, pero yo ahora no puedo hacer nada.

El group_concat yo lo entiendo perfectamente

Verás en el campo extras de la tabla presupuestos se guardan los extras seleccionados como 1,5,15

Yo los quiero recuperar como Pensión completa,Aparcamiento,Excursión

Resumiendo:
1- Tengo dos tablas extras y presupuestos
2- En el campo extras de la tabla presupuestos se guandan los datos '1,5,15'
3- Quiero recuperar los nombres de los extras guardados en la tabla extras, en el campo extra.

Gracias por vuestro tiempo.
  #4 (permalink)  
Antiguo 12/06/2013, 11:30
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: Problema con string en clausula in

Mas o menos por acá:
Código MySQL:
Ver original
  1.     P.id_presupuesto,
  2.     (SELECT GROUP_CONCAT(DISTINCT E.extra) FROM extras E WHERE FIND_IN_SET(E.id_extras , P.extras)>0) extras
  3. FROM presupuestos
Pero recomiendo enfáticamente corregir ese desastre antes de avanzar un paso mas. Los problemas no han hecho más que comenzar...
__________________
¿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: clausula, select, sql, string, 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 11:39.