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 originalSELECT T.*, W.*
FROM sitios_web_por_tema W INNER JOIN temas T ON W.id_tema = T.id
WHERE id_idioma='1' AND id_concepto='5'
GROUP BY T.id
En cambio, si lo que quieres es ordenarlos de una forma determinada, sería:
Código SQL:
Ver originalSELECT T.*, W.*
FROM sitios_web_por_tema W INNER JOIN temas T ON W.id_tema = T.id
WHERE id_idioma='1' AND id_concepto='5'
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.