Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Distribuir registros cronológicamente en columnas

Estas en el tema de Distribuir registros cronológicamente en columnas en el foro de PHP en Foros del Web. Buenas, la verdad pense que iba a ser más sencillo pero no le hallo vuelta. Estoy utilizando un viejo ejemplo de las FAQ's para distribuir ...
  #1 (permalink)  
Antiguo 24/10/2013, 08:29
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Distribuir registros cronológicamente en columnas

Buenas, la verdad pense que iba a ser más sencillo pero no le hallo vuelta.

Estoy utilizando un viejo ejemplo de las FAQ's para distribuir registros en 2 columnas, sin embargo lo que siempre utilizo me da como resultado lo siguiente:

EJEMPLO DE LO QUE NO QUIERO
Col 1 - Col 2
--------------------
1 - 2
3 - 4
5 - 6



EJEMPLO DE LO QUE QUIERO

Col 1 - Col 2
--------------------
1 - 4
2 - 5
3 - 6

es decir, tengo 22 registros en la BD, que me los divida a la mitad, que serían 11, cuando llegue a 11, me cree otro div y continue hasta el final.

Con esto hago normalmente el ejemplo de lo que no quiero, a ver si me dan una manita por favor.
Código PHP:
<?php
$columnes 
2# Número de columnas (variable)
                 
            
                 
                
for ($i=1$row mysql_fetch_array ($resultados); $i++) 
                {
                    
$resto = ($i $columnes); 
                    if (
$resto == 1
                    {
                        echo 
"<div class='estantes'>";
                    } 
                    
                    
                    
                    
                            echo 
"<div class='libros'> 
                                    
                                  <a href='ampliar-productos.php?id="
.$row['id']."' rel='facebox'>
                                    
                                  <img src='../img/prod/mini/"
.$row['imagen']."' title='".$row['nombre']."'class='tool' />
                                  
                                  </a>
                                  </div>"

                    
                    
                if (
$resto == 0
                    {
                        echo 
"</div>";
                    } 
                }
                
                
mysql_close($conn);
?>
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #2 (permalink)  
Antiguo 24/10/2013, 09:13
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: Distribuir registros cronológicamente en columnas

Hola loncho, mira si esto te sirve:

Código PHP:
Ver original
  1. echo "<table align=center>";
  2.  
  3.     $columnes = 4; # Número de columnas (variable)
  4.  
  5.     if (($rows=mysql_num_rows($result))==0) {
  6.         echo "<tr><td colspan=$columnes>No hay resultados en la BD.</td></tr> ";
  7.     } else {
  8.         echo "<tr><td colspan=$columnes>$rows Resultados </td></tr>";
  9.     }
  10.     $filas = ceil($rows / $columnes); # Obtener número de filas de acuerdo al número de resultados y columnas dadas.
  11.     $matriz = array(); # Matriz que guardará los resultados de la manera pedida, llenando primero las filas.
  12.     $i=1; # Fila inicial.
  13.     $columActual = 1; # Columna Actual
  14.     while($row = mysql_fetch_row ($result)){
  15.         if( !isset($matriz[$i]) ) {
  16.             $matriz[$i] = array(); # Añadimos una nueva fila a la matriz.
  17.         }
  18.        
  19.         $matriz[$i][$columActual] = $row; # Añadimos el registro en la columna actual.
  20.         $i++; # Incrementamos fila
  21.         if($i > $filas){ # Si ya pasamos el número de filas máximo procedemos a llenar la siguiente columna y empezar desde la primera fila
  22.             $columActual = $columActual+1;
  23.             $i = 1;
  24.         }
  25.     }
  26.     foreach($matriz as $fila){
  27.         echo "<tr>";
  28.         for($k=1; $k<=$columnes;$k++){
  29.             if(isset($fila[$k])){
  30.                 echo "<td>{$fila[$k][1]}</td>";
  31.             }else{
  32.                 echo "<td>&nbsp;</td>";
  33.             }
  34.         }
  35.         echo "</tr>";
  36.     }
  37.     mysql_close($connexion);
  38. echo "</table>";


Cualquier sugerencia es bienvenida

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #3 (permalink)  
Antiguo 24/10/2013, 12:28
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Distribuir registros cronológicamente en columnas

Lo estoy probando.. creo que puede resultar... de paso lo analizo a ver como se plantea y tratar de convertilo para DIV flotantes.

Comento luego los resultados.
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #4 (permalink)  
Antiguo 25/10/2013, 07:45
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Distribuir registros cronológicamente en columnas

Efectivamente, así como lo planteas, y recuerdo ya haber visto ese código, funciona muy bien.

Yo lo adapté para que funcione con DIV, ahora tendría que ver como adaptarlo a PDO.

Gracias, les comparto mi solución.

Código CSS:
Ver original
  1. <style type="text/css">
  2.  
  3. .izq{
  4.     width:300px;
  5.     float:left;
  6. }
  7.  
  8.  
  9.  
  10. .local{
  11.     font-family:Georgia, "Times New Roman", Times, serif;
  12.     color:#336699;
  13.     margin-bottom:5px;
  14. }
  15.  
  16. .dir{
  17.     font-family:"Trebuchet MS", Arial, Helvetica, sans-serif;
  18.     font-size:10px;
  19.     color:#666666;
  20.     margin-bottom:15px;
  21. }
  22.  
  23. </style>


Código PHP:
<?php

$sql
="SELECT * FROM puntos_ventas";
$res=mysql_query($sql$conn) ;




 
    
$columnes 2# Número de columnas (variable)
 
    
if (($rows=mysql_num_rows($res))==0) {
        echo 
"<div>No hay resultados en la BD.</div> ";
    } else {
        echo 
"<h2>$rows Resultados</h2>";
    }
    
$filas ceil($rows $columnes); # Obtener número de filas de acuerdo al número de resultados y columnas dadas.
    
$matriz = array(); # Matriz que guardará los resultados de la manera pedida, llenando primero las filas.
    
$i=1# Fila inicial.
    
$columActual 1# Columna Actual
    
while($row mysql_fetch_array ($res)){
        if( !isset(
$matriz[$i]) ) {
            
$matriz[$i] = array(); # Añadimos una nueva fila a la matriz.
        
}
        
        
$matriz[$i][$columActual] = $row# Añadimos el registro en la columna actual.
        
$i++; # Incrementamos fila
        
if($i $filas){ # Si ya pasamos el número de filas máximo procedemos a llenar la siguiente columna y empezar desde la primera fila 
            
$columActual $columActual+1;
            
$i 1;
        }
    }
    foreach(
$matriz as $fila){
        echo 
"<div class='izq'>";
        for(
$k=1$k<=$columnes;$k++){
            if(isset(
$fila[$k])){
                 
?>
                <div class="local"><?php echo  $fila[$k]['local'];?></div>
                <div class="dir"><?php echo  $fila[$k]['direccion'];?></div>
                
                <?php
            
}else{
                echo 
"<div>&nbsp;</div>";
            }
        }
        echo 
"</div>";
    }
    
mysql_close($conn);

?>
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...

Etiquetas: columnas, registros
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:16.