Ver Mensaje Individual
  #7 (permalink)  
Antiguo 14/10/2010, 05:50
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Al cruzar tablas necesito que arroje una vez el campo en común

Cita:
me he bajado varios manuales, estoy estudiando más en profundidad y tus explicaciones me han servido mucho. ¿que manual me recomiendas?
quizás tienes un más completo que los que tengo
Más que un manual, te recomendaría que hicieras un curso sobre bases de datos, porque ningún manual puede en algunos momentos suplantar lo que te aporta un instructor, no sólo por experiencia, sino por la claridad de comprender algunos conceptos que son esencialmente abstractos, como es el caso del análisis y diseño de bases de datos.
Cita:
He probado tu código y me sigue arrojando la repetición del tema.
El uso de INNER JOIN sólo puede darte repeticiones de registro en la primera tabla si existen al menos dos registros referidos al mismo sitio. Que se repitan datos de la segunda tabla es perfectamente lógico, porque dos sitios diferentes pueden contener el mismo tema.
Si lo que quieres es que sólo te devuelva un sitio por tema, lo que se debe hacer es un GROUP BY por el tema:

Código SQL:
Ver original
  1. SELECT T.*, W.*
  2. FROM sitios_web_por_tema W INNER JOIN temas T ON W.id_tema = T.id
  3. WHERE id_idioma='1' AND id_concepto='5'
  4. GROUP BY T.id

En cambio, si lo que quieres es ordenarlos de una forma determinada, sería:

Código SQL:
Ver original
  1. SELECT T.*, W.*
  2. FROM sitios_web_por_tema W INNER JOIN temas T ON W.id_tema = T.id
  3. WHERE id_idioma='1' AND id_concepto='5'
  4. ORDER BY T.id, W.id

Infortunadamente lo que hace un DBMS es devolverte una tabla, y cada dato diferente está representado por una columna diferente, por lo que hacer algo así:
Cita:
tema1
enlace 1
enlace2
enlace3

tema 2
enlace 4
enlace 5
enlace6
Es algo que debes resolver en la aplicación, no en el DBMS. SQL Sólo puede construir esto:
Cita:
tema1 enlace 1
tema1 enlace2
tema1 enlace3
tema2 enlace 4
tema2 enlace 5
tema2 enlace6
Respecto al ejemplo propuesto por leonardo_josué, lamento advertirte que lo que te traerá será esto:
Cita:
nivel|id|descripcion
------------------------
1|1|Tema 1
1|2|Tema 2
1|3|Tema 3
2|1|Enlace 1
2|1|Enlace 2
2|1|Enlace 3
2|2|Enlace 4
2|2|Enlace 5
2|2|Enlace 6
porque en un UNION, el último ORDER BY afecta la totalidad de la tabla devuelta y no una parte de ella, por lo que ordenará las dos primeras columnas de todos los registros primero.
Además, como propuesta no considera que existan más de tres temas. Ese modelo debería iterarse tantas veces como temas haya, por lo que no puedes crear una única sentencia que lo haga.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 14/10/2010 a las 06:03