Foros del Web » Programando para Internet » PHP »

Ordenar Categorias MySql

Estas en el tema de Ordenar Categorias MySql en el foro de PHP en Foros del Web. Hola a todos Quiero organizar unas categorias como lo maneja wordpress donde tenga una jerarquia. actualmente tengo las siguientes tablas: categorias ID / Nombre / ...
  #1 (permalink)  
Antiguo 04/02/2013, 05:43
Avatar de konoyek  
Fecha de Ingreso: julio-2007
Mensajes: 268
Antigüedad: 16 años, 9 meses
Puntos: 0
Ordenar Categorias MySql

Hola a todos

Quiero organizar unas categorias como lo maneja wordpress donde tenga una jerarquia. actualmente tengo las siguientes tablas:

categorias
ID / Nombre / Descripcion / Estado

categorias_relacion
ID / principal / secundaria

Para tener una relacion de cada categoria con cada una, en la tabla categorias_relacion indico los Id para saber a donde pertenece cada uno.


la idea de esto es podar visualizar todas las categorias que desee sin problema alguno, el codigo que tengo actulamente es:

Código PHP:
$i=0;
$sql2="SELECT * FROM categoria_relacion ORDER BY principal ASC";
$res2=mysql_query($sql2);

while($row=mysql_fetch_assoc($res2) ){
$prin=$row['principal'];

$sql4="SELECT * FROM categoria WHERE estado=1 AND ID=$prin ORDER BY Nombre ASC";
$res4=mysql_query($sql4);
while($row=mysql_fetch_assoc($res4) ){
$id=$row['ID'];
$nombre=$row['Nombre'];
$descri=$row['descripcion'];
$estado=$row['estado'];
$conteo=0;

$i++;
if (($i%2)==0) {
$class="even";
}
else{
    $class="odd";
}


echo '<tr class="'.$class.'">
    <td>'.$nombre.' // '.$prin.'</td>
    <td>'.$descri.'</td>
    <td>'.$conteo.'</td>'; ?>
    <td>
<form  action="<?php echo $_SERVER['PHP_SELF']; ?>" name="edit" method="post">
<input name="editar" title="Editar" type="image" src='<? echo $url?>imagenes/edit.png' value="<? echo $num?>" />
<input type="hidden" name="num" value="<? echo $num;?>" />
<input type="hidden" name="editar"/>
</form>
</td>

</tr>
<?

$sql
="SELECT * FROM categoria_relacion WHERE principal=$id ORDER BY secundaria ASC";
$res=mysql_query($sql);

while(
$row=mysql_fetch_assoc($res) ){
$prin=$row['principal'];
$sec=$row['secundaria'];


$sql1="SELECT * FROM categoria WHERE estado=1 AND ID=$sec ORDER BY Nombre ASC";
$res1=mysql_query($sql1);
while(
$row=mysql_fetch_assoc($res1) ){
$id=$row['ID'];
$nombre=$row['Nombre'];
$descri=$row['descripcion'];
$estado=$row['estado'];
$conteo=0;



echo 
'<tr class="'.$class.'">
    <td> - '
.$nombre.' / '.$prin.' - '.$sec.'</td>
    <td>'
.$descri.'</td>
    <td>'
.$conteo.'</td>'?>
    <td>
<form  action="<?php echo $_SERVER['PHP_SELF']; ?>" name="edit" method="post">
<input name="editar" title="Editar" type="image" src='<? echo $url?>imagenes/edit.png' value="<? echo $num?>" />
<input type="hidden" name="num" value="<? echo $num;?>" />
<input type="hidden" name="editar"/>
</form>
</td>

</tr>

<?
}

}
}
}
echo 
"Total resultados: <b>$i</b>";
?>
El resultado que tengo es:

Cocinas
- Astra
- Iride
- prueba 1

Astra
- Cocinas

Cocinas
- Moderno


La Idea es obtener lo siguiente:


Cocinas
- Astra
-- Cocinas
--- Moderno
- Iride
- prueba 1
  #2 (permalink)  
Antiguo 04/02/2013, 07:58
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 8 meses
Puntos: 194
Respuesta: Ordenar Categorias MySql

Hola "konoyek" quería empezar comentándote que tu duda se resuelve enteramente desde SQL, luego la forma en que que desarrollas tu problema es errónea, no debes hacer dos consultas, con una sola juntando las tablas te bastaría. ¿Sabes hacer un join?

Código SQL:
Ver original
  1. SELECT * FROM categorias c, categoria_relacion cr
  2. WHERE c.id=cr.principal
  3. AND c.estado=1;

http://es.wikipedia.org/wiki/Join
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #3 (permalink)  
Antiguo 04/02/2013, 22:02
Avatar de konoyek  
Fecha de Ingreso: julio-2007
Mensajes: 268
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Ordenar Categorias MySql

Hola h2swider agradezco tu respuesta ya puedo saber claramente la busqueda de las 2 tablas el problema radica al momento de ordenarlo ya que aun no lo tengo bien claro, el codigo actual que tengo con JOIN es:

Código PHP:

<? 
$i
=0;
$sql2="SELECT * FROM categoria_relacion NATURAL JOIN categoria ORDER BY categoria_relacion.principal ASC";
$res2=mysql_query($sql2);

while(
$row=mysql_fetch_assoc($res2) ){
$prin=$row['principal'];
$sec=$row['secundaria'];

$id=$row['ID'];
$nombre=$row['Nombre'];
$descri=$row['descripcion'];
$estado=$row['estado'];
$conteo=0;

$i++;
if ((
$i%2)==0) {
$class="even";
}
else{
    
$class="odd";
}

echo 
'<tr class="'.$class.'">
    <td>'
.$nombre.' / '.$prin.' / '.$sec.' / '.$id.'</td>
    <td>'
.$descri.'</td>
    <td>'
.$conteo.'</td>'?>
    <td>
<form  action="<?php echo $_SERVER['PHP_SELF']; ?>" name="edit" method="post">
<input name="editar" title="Editar" type="image" src='<? echo $url?>imagenes/edit.png' value="<? echo $num?>" />
<input type="hidden" name="num" value="<? echo $num;?>" />
<input type="hidden" name="editar"/>
</form>
</td>

</tr>
<?      


}
echo 
"Total resultados: <b>$i</b>";
?>
El resultado que tengo es:

Cocinas
Iride
prueba
Astra
Cocinas
Prueba final

La idea es obtener el siguiente orden:


Cocinas
- Iride
-- prueba
- Astra
-- Cocinas
Prueba Final


Agradezco demasiado la colaboracion prestada!

Etiquetas: categorias, mysql, resultados, select, sql, 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 01:20.