Foros del Web » Programando para Internet » PHP »

Mostrar resultados de un inner join de forma ordenada

Estas en el tema de Mostrar resultados de un inner join de forma ordenada en el foro de PHP en Foros del Web. Hola a todos. A ver si me podeis ayudar con este problema. Quizás sea una chorrada, pero no hay manera de encontrar una solución satisfactoria. ...
  #1 (permalink)  
Antiguo 25/10/2006, 03:38
 
Fecha de Ingreso: julio-2004
Mensajes: 2
Antigüedad: 19 años, 10 meses
Puntos: 0
Mostrar resultados de un inner join de forma ordenada

Hola a todos.

A ver si me podeis ayudar con este problema. Quizás sea una chorrada, pero no hay manera de encontrar una solución satisfactoria.

Tengo dos tablas que vendrían a ser lo siguiente:

articulos:
Código:
---------------------------------------------------------
| articulos_id | articulos_nombre | articulos_sector_id |
---------------------------------------------------------
|1             | Artículo 1       | 2                   |
---------------------------------------------------------
|2             | Artículo 2       | 3                   |
--------------------------------------------------------
|3             | Artículo 3       | 1                   |
---------------------------------------------------------
|4             | Artículo 4       | 2                   |
---------------------------------------------------------
|5             | Artículo 5       | 3                   |
---------------------------------------------------------
sectores:
Código:
---------------------------------
| sectores_id | sectores_nombre |
---------------------------------
| 1           | Sector 1        |
---------------------------------
| 2           | Sector 2        |
---------------------------------
| 3           | Sector 3        |
---------------------------------
Lógicamente, si hago

SELECT t1.articulos_id, t1.articulos_nombre, t2.sectores_nombre FROM articulo AS t1 INNER JOIN sectores AS t2 ON t1.articulos_sector_id=t2.sectores_id

esto me devuelve:

Código:
-----------------------------------------------------
| articulos_id | articulos_nombre | sectores_nombre |
-----------------------------------------------------
|1             | Artículo 1       | Sector 2        |
-----------------------------------------------------
|2             | Artículo 2       | Sector 3        |
-----------------------------------------------------
|3             | Artículo 3       | Sector 1        |
-----------------------------------------------------
|4             | Artículo 4       | Sector 2        | 
-----------------------------------------------------
|5             | Artículo 5       | Sector 3        | 
-----------------------------------------------------
Con este resultado lo que querría es mostrarlo por pantalla de la siguiente manera:

Sector 1
--------
Artículo 3

Sector 2
--------
Artículo 1
Artículo 4

Sector 3
--------
Artículo 2
Artículo 5

En principio he pensado en meter el resultado en una array y recorrerla mediante bucles para ir generando la tabla con los resultados, pero me gustaría saber si hay alguna otra manera más elegante ya que esta me parece un tanto chapucera.

Muchas gracias.
  #2 (permalink)  
Antiguo 25/10/2006, 06:01
 
Fecha de Ingreso: agosto-2003
Mensajes: 68
Antigüedad: 20 años, 8 meses
Puntos: 0
Una forma seria utilizando GROUP BY para que lo agrupe por sectores_nombre
y de esta forma al listarlo te quedan agrupado por sectores, que creo que es lo que tu quiere..

SELECT t1.articulos_id, t1.articulos_nombre, t2.sectores_nombre FROM articulo AS t1 INNER JOIN sectores AS t2 ON t1.articulos_sector_id=t2.sectores_id GROUP BY t2.sectores_nombre , t2.sectores_id

Espero que te ayude...
__________________
AdsParaTuWeb.com
  #3 (permalink)  
Antiguo 25/10/2006, 08:36
 
Fecha de Ingreso: mayo-2005
Mensajes: 217
Antigüedad: 19 años
Puntos: 5
o lo que puedes hacer es ordenarlo por sector
SELECT t1.articulos_id, t1.articulos_nombre, t2.sectores_nombre
FROM articulo AS t1 INNER JOIN sectores AS t2 ON t1.sectores_id=t2.sectores_id
ORDER BY t2.sectores_nombre

entonces te quedaria un registro
-----------------------------------------------------
| articulos_id | articulos_nombre | sectores_nombre |
-----------------------------------------------------
|3 | Artículo 3 | Sector 1 |
|4 | Artículo 4 | Sector 2 |
|1 | Artículo 1 | Sector 2 |
|2 | Artículo 2 | Sector 3 |
|5 | Artículo 5 | Sector 3 |
-----------------------------------------------------


y cundo lo muestres en pantalla con un
$sec="";
while($row = mysql_fetch_assoc($rs)){
if ($sec!=$row['sectores_nombre']){
echo $row['sectores_nombre'];
}
$sec=$row['sectores_nombre'];
echo $row['articulos_nombre'];
}
bueno prueba
  #4 (permalink)  
Antiguo 25/10/2006, 15:18
 
Fecha de Ingreso: julio-2004
Mensajes: 2
Antigüedad: 19 años, 10 meses
Puntos: 0
Perfecto, klyfa. Muchas gracias. Eso mismo precisamente es lo que iba buscando. Se me había metido en la cabeza hacerlo con una array y no había manera de sacarlo de otra forma.

Gracias a ti también, yoelis.
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 06:15.