Foros del Web » Programando para Internet » PHP »

mi pqueño aporte

Estas en el tema de mi pqueño aporte en el foro de PHP en Foros del Web. incrementar columnas y filas de manera dianmica con php y mysql hace unos dias me tope con un queryde este tipo x lo q se ...
  #1 (permalink)  
Antiguo 28/08/2011, 18:02
Avatar de mko
mko
 
Fecha de Ingreso: agosto-2010
Ubicación: la vida es un riesgo
Mensajes: 101
Antigüedad: 14 años, 3 meses
Puntos: 14
mi pqueño aporte

incrementar columnas y filas de manera dianmica con php y mysql
hace unos dias me tope con un queryde este tipo x lo q se me hico dificil pero no imposible la solucion.
aqui pongo un ejemplo bastante sencillo y entendible de como hacerlo con php y mysql. de antemano le digo que no se si es la forma optima de acerlo. pero de que funciona es un hecho. todo depende delo que decees y la ocmplejida de tu consulta

para hacerlo posible haremos uso de la funcion COUNT de mysql

primero crea una tabla: con el nombre productos en tu b.d
con los siguintes campo id-articulos-precio-dia

introduce lo siguiente:
articulos|precio|dia
leche ---15 --------1
leche ---- 15-----------2
huevo ----30-----------2
pan -----5-------------1
azucar ---25------------1
azucar ---25-----------1

con estos datos el resultado debe verse

articulo | dia1 | dia2 | dia3
_______________________________________
azucar | 25 | 0 | 25
_____________________________________
lache | 0 | 25 | 0
_________________________________________-
huevo | 15 | 15 | 0
__________________________________________
pan | 5 | 0 | 0
_________________________________________


aqui el archivito php ponle el nombre que gustes

Código PHP:

$link
=mysql_connect("localhost","root");
        
mysql_select_db("tu base",$link);

//empieza el algrupamiento por grupos
$query "SELECT dia,COUNT(dia) FROM productos  GROUP BY dia";  
$result mysql_query($query) or die(mysql_error());

echo
"<table border=1' cellpadding='' cellspacing='0' bordercolor='#000000' align='center'>
<tr>
 <td><div  align='center'class='tablatitulo2'>articulos</div></td>"
;
while (
$row mysql_fetch_array($result))
{        
                
                 echo
"<td>dia:".$row['dia']."</td>";




}
//cierr el incremento de columnas
echo"</tr>";



$q "SELECT dia,articulo,COUNT(articulo) FROM productos  GROUP BY articulo";  
$r mysql_query($q) or die(mysql_error());
while (
$rowk mysql_fetch_array($r))
{
echo
"<tr>";    
echo
" <td><div  align='center'class='tablatitulo2'>".$rowk['articulo']."</div></td>";

//empieza el algrupamiento por grupos
$query "SELECT dia,COUNT(dia) FROM productos  GROUP BY dia";  
$result mysql_query($query) or die(mysql_error());

    while (
$row mysql_fetch_array($result))
    {        
   echo
"<td>";
   
$articulos_precio "SELECT articulo,precio,COUNT(precio) FROM productos where  articulo='".$rowk["articulo"]."' AND dia='".$row["dia"]."'  GROUP BY articulo"
   
$int mysql_query($articulos_precio) or die(mysql_error());

  if (
$row1 mysql_fetch_array($int)) 
   {
    echo
"".$row1["precio"]."";
}else{
$sub1=0;
echo
"<div align='center'  class='filas'>$sub1</div>";}                        
echo
"</td>";
}

echo
"</tr>";

ahora si agreagas un articuclo a con el nuermo 4 del campo dia se agregara una columna a la deracha con el numero de dia
__________________
cuando no esperas nada y obtienes todo eso es destino
  #2 (permalink)  
Antiguo 29/08/2011, 02:54
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 8 meses
Puntos: 253
Respuesta: mi pqueño aporte

Buenas.

No entiendo la relación entre la tabla Productos y la presentación final en función de los días, de qué tipo de aplicación es esto?

Yo te daría un consejo, la base de datos necesita un repasito, no tiene sentido que almacenes el precio de los artículos cada vez que se compran. Lo suyo sería tener una tabla Artículo y otra que relacione el artículo con el día.

Y para contruir la tabla, no tienes más que buscar MAX(dia) y así sabes el número de columnas que tienes. Para sacar los artículos, te recomiendo que eches un ojo a la cláusula GROUP BY, que verás que permite añadir varios campos separados por coma y que, además, permite utilizar WITH ROLLUP para que añada campos NULL en los lugares en que no haya dato para cada agrupación. Con esto podrías hacer "GROUP BY articulo, dia WITH ROLLUP" y tendrías un registro resultado por cada celda de tu tabla.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #3 (permalink)  
Antiguo 29/08/2011, 07:14
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: mi pqueño aporte

Cita:
Y para contruir la tabla, no tienes más que buscar MAX(dia) y así sabes el número de columnas que tienes. Para sacar los artículos, te recomiendo que eches un ojo a la cláusula GROUP BY, que verás que permite añadir varios campos separados por coma y que, además, permite utilizar WITH ROLLUP para que añada campos NULL en los lugares en que no haya dato para cada agrupación. Con esto podrías hacer "GROUP BY articulo, dia WITH ROLLUP" y tendrías un registro resultado por cada celda de tu tabla.
No estaras hablando de GROUP_CONCAT?

Cita:
no tienes más que buscar MAX(dia) y así sabes el número de columnas que tienes
No necesariamente porque el maximo sea 10, significa que hayan 10 registros ;) Es mejor utilizar COUNT
  #4 (permalink)  
Antiguo 29/08/2011, 07:20
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 8 meses
Puntos: 253
Respuesta: mi pqueño aporte

Tienes razón en la segunda, ha sido error mío.

En la primera, la verdad no conozco GROUP_CONCAT, pero no me refería a eso, me refiero que puedes agrupar por varios campos. Por ejemplo, si haces GROUP BY articulo, dia tendrás un registro para cada par de valores diferente de estos dos campos. Simplemente era eso a lo que me refería.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #5 (permalink)  
Antiguo 29/08/2011, 07:46
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: mi pqueño aporte

Creo que veo cual fue el problema. Es que cuando dijiste que se podian agregar varios campos separados por comas, supuse que te referias a que GROUP BY retornaba eso (que es lo que hace GROUP_CONCAT). Sin embargo, te refieres a agrupar usando varios campos ;) Oops!
  #6 (permalink)  
Antiguo 29/08/2011, 14:45
Avatar de mko
mko
 
Fecha de Ingreso: agosto-2010
Ubicación: la vida es un riesgo
Mensajes: 101
Antigüedad: 14 años, 3 meses
Puntos: 14
Respuesta: mi pqueño aporte

exacto vgonga1986 no tiene sentido y es porque solo es una idea muy simple de como incrementar columna y filas en una tabla; usando los datos de una tabla mysql no significa que sea la unica ni la optima. todo depende de lo se nececite mostrar

el campo precio solo es relleno.

Ronruby , vgonga1986 gracias por tomarse el tiempo e iluminarme en mi camino buen dia
__________________
cuando no esperas nada y obtienes todo eso es destino

Etiquetas: mysql, 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 14:15.