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

Problema con CONCAT

Estas en el tema de Problema con CONCAT en el foro de Mysql en Foros del Web. buenas madrugadas en México :) tengo un problema con un concat esta es mi consulta @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original SELECT formato , logo ...
  #1 (permalink)  
Antiguo 13/06/2011, 00:31
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 10 meses
Puntos: 641
Problema con CONCAT

buenas madrugadas en México :)

tengo un problema con un concat esta es mi consulta

Código MySQL:
Ver original
  1. SELECT formato, logo, peso, group_concat( dato ) AS grupo
  2.  
  3. SELECT formato, logo, peso, CONCAT( '<a href=\"', link, '\">servers/', logo, '</a>' ) dato
  4. FROM links_d
  5. JOIN servidores
  6. WHERE capitulo_id =1
  7. AND links_d.servidor = servidores.id
  8. ORDER BY peso, formato
  9. )datos
  10. GROUP BY peso, formato

y me regresa algo así

formato logo peso grupo
2 rp.png 100 <a href="345">servers/rp.png</a>

el problema es que formato esta relacionado con una tabla que contiene todos los formatos disponibles, pero no puedo unir la tabla de los formatos

un ejemplo de lo que intento y nanais

Código MySQL:
Ver original
  1. SELECT formatos.nombre, formato, logo, peso, group_concat( dato ) AS grupo
  2.  
  3. SELECT formato, logo, peso, CONCAT( '<a href=\"', link, '\">servers/', logo, '</a>' ) dato
  4. FROM links_d
  5. JOIN servidores
  6. WHERE capitulo_id =1
  7. AND links_d.servidor = servidores.id
  8. ORDER BY peso, formato
  9. )datos
  10. JOIN formatos
  11. AND links_d.formato = formatos.id
  12. GROUP BY peso, formato

me devuelve que formatos.nombre es unknow

esta consulta me trae

agradezco cualquier ayuda

Última edición por memoadian; 13/06/2011 a las 02:07
  #2 (permalink)  
Antiguo 13/06/2011, 05:11
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: Problema con CONCAT

Puede ser un incorrecto uso de los alias o de los JOIN (te conviene usar INNER JOIN y no sólo JOIN).
Prueba:
Código MySQL:
Ver original
  1.   F.nombre, formato, logo, peso, group_concat(dato) grupo
  2.     (SELECT formato, logo, peso, CONCAT( '<a href=\"', link, '\">servers/', logo, '</a>' ) dato
  3.      FROM links_d L INNER JOIN servidores S ON L.servidor = S.id
  4.      WHERE
  5.        capitulo_id =1
  6.      ORDER BY peso, formato) datos
  7.   INNER JOIN formatos F ON datos.formato = F.id
  8. GROUP BY peso, formato
__________________
¿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 13/06/2011, 07:53
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 10 meses
Puntos: 641
Respuesta: Problema con CONCAT

joder :S eres un maestro, darte karma es insuficiente para agradecerte la ayuda que me has dado gracias bro

aunque me gustaria que me dijeras cual es la diferencia y otra vez gracias
  #4 (permalink)  
Antiguo 13/06/2011, 08:08
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: Problema con CONCAT

Con JOIN te arriesgas a un producto cartesiano, porque intenta igualar las columnas que tengan el mismo nombre, y si no representan el mismo dato exactamente, el resultado de poner sólo JOIN puede dar respuestas erróneas.
El INNER JOIN, por su lado exige que pongas lso campos que se relacionan y sólo relaciona esos. Es más preciso.
Por otro lado, ten en cuenta que toda subconsulta en el FROM genera una tabla derivada que debe llvar su nombre. hasta allí ibas bien, pero luego querías invocar una de las tablas internas de la subconsulta por su nombre, y eso no se puede hacer, porque para la consulta exterior ya no existe (está encapsulada en la subconsulta). Para acceder a los datos tienes que estar leyendolos en la subconsulta, y sólo puedes usar como nombre de tabla el de la derivada. cualquier otra cosa puede dar errores de iterpretación.
Finalmente: El INNER JOIN ... ON... es más eficiente que poner la relación en el WHERE porque el WHERE se aplica una vez leído todo (incluyendo lo que se descartará), mientras que el INNER JOIN descarta lo que no cumple la relación a medida que va leyendo registros.
__________________
¿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 13/06/2011, 09:21
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 10 meses
Puntos: 641
Respuesta: Problema con CONCAT

Ok entendido y anotado muchas gracias.

Etiquetas: concat
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 23:36.