Darse de alta en la web | Recuperar password   
Inicio / Foros / MySQL / ruptura por una tabla
10 respuestas recibidas | 192 visitas | Categoría MySQL

ruptura por una tabla

Avatar de lakers
Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2

(Nivel 2 - 47 posts)

#0 Offline lakers Usuario 10 abr 08 (17:24)  
wenas
estoy intentando hacer una ruptura por clientes de una prueba(ruptura :se usa para dividir el informe en grupos de registros ó líneas, cada vez que cambia el valor de un campo de ruptura )
con la intencion de mostrarlo posteriormente.
o sea en cada informe o una pagina que va ser una factura quiero que aprezcan los datos del cliente con las compras que haya efectuado y el total de su compra.
hecho de Saltar a una nueva pagina que sera un informe(pdf)): especifica si la impresión comenzará en una nueva página después que aparezca una ruptura de informe correspondiente a ese nivel de ruptura.
mi base de datos tiene 3 tablas cliente(id,nombre,descp),producto(id,descr,prec),compra(id,dni,id_prod,fecha_compra)
si alguien tiene una idea para meterle mano por fa que me lo facilite yaque me ase falta urgentemente.
gracias de antemano.
saludos

Re: ruptura por una tabla

Avatar de mmgarcia
Nivel 3 Nivel 3 Nivel 3 Nivel 3 Nivel 3 Nivel 3 Nivel 3

(Nivel 3 - 205 posts)

#1 Offline mmgarcia Usuario 11 abr 08 (23:11)  
Hola lakers.
Lo que dices con ruptura yo lo conozco como
"Algoritmo de Corte de Control"

Aqui tenes info que te puede ayudar http://www.lugro.org.ar/pipermail/programacion/2004-May/000296.html
Aplicado a la consulta podes usarlo ordenando por id del cliente y haciendo el corte de control por este.

Saludos

Mario Garcia
Est. Ing. Sistemas de Información
http://www.ohstudio.com.ar Oh!STUDIO Media Solutions
http://www.bedesk.net Web Operating System Desktop

Re: ruptura por una tabla

Avatar de lakers
Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2

(Nivel 2 - 47 posts)

#2 Offline lakers Usuario 14 abr 08 (11:11)  
gracias mario
no pude contestarte antes yaque estuve un pko malo.
intentare adecuar el algortimo a mi aplicacion basicamente tengo este modelo de datos(p.e) :
nombre descrip precio cantidad
pepe hierro de .. 56.78 2
Manuel libros procedentes M 3.45 456
Manuel ordenadadores de pc- 300.78 97
jose-luis hierro de antequera 56.78 566
jose-luis placas base de Asus 89.89 78
ahora kiero k al ejecutar un script de php se muestra como resultado en una pagina(informe pdf) el total de compra de cada cliente,de tal manera que al cambiar el nombre del cliente se salta a otra pagina para mostrar otros datos del cliente con el total de su compra.
la unica idea que me ocurre es meter los nombres en un array mediante un query(que no se como hacerlo)
ordenar los clientes por nombre.
si alguien tiene otra alternativa sere muy agradecido a quien me la puede facilitar.
pero la pega sigue siendo el salto a otra pagina sabiendo que la condicion de salto,es el cambio de nombre del cliente.
muchisima gracias por vuestra ayuda.
saludos

UNA PREGUNTA?

Avatar de jurena
Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5

(Nivel 5 - 729 posts)

#3 Offline jurena Usuario 14 abr 08 (22:40)  
Si tienes una marca en un programa para generar un corte de página en el PDf, por qué no usarlo para separar los datos.
Imaginemos que haces la selección de clientes por un criterio y luego con while dentro de otro while generas las facturas con la lista de adquiciones y totales, y después de cada total y justo después de cerrar el primer while, el de las adquisiciones, introduces el corte de página. Eso obligaría a que la siguiente página empezara con el siguiente cliente y sus datos y así sucesivamente. ¿Tal vez funcionará? Yo no he trabajado con esas clases para crear PDF, pero deberías intentarlo...

Re: ruptura por una tabla

Avatar de lakers
Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2

(Nivel 2 - 47 posts)

#4 Offline lakers Usuario 15 abr 08 (15:49)  
gracias maestro jurena por tu respuesta,
la verdad no me kedo muy claro lo k me comentaste io pero basicamente, te voy explicando lo quiero hacer paso a paso:
lo k hay en mi base datos son 3 tablas:
1)cliente(id(primary key),nombre,descrp)
2)compra(id(primay key),id_cliente,id_prod,cantidad,fecha)
3)producto(id(primary key),descrp,precio)
(siendo id_cliente es una clave foranea de id de la tabla cliente)
(siendo id_prod es una clave foranea de id de la tabla producto)
el pdf se me generar perfectamente apartir de php.
con esta consulta:

Código PHP


select cliente.nombre,producto.descrp,producto.precio,compra.cantidad,producto.precio * compra.cantidad AS total from
cliente,producto,compra where  compra.id_cliente =cliente.id and
compra.id_prod=producto.id


saco los siguientes resultado:

Código PHP


nombre  descrp       precio  cantidad   total  
luis         teclado       5.66      2500         14150.00
luis         palca base 126.45   145           18335.25
luis         memorias    36.05     45             1622.25
jose       palca base  126.45   100           12645.00


ahora lo k quiero sacar mediante un query el total de compra de un cliente junto en nº de articulos.(p.e en el caso de luis):

Código PHP


nombre  descrp       precio  cantidad   total  
luis         teclado       5.66      2500         14150.00
luis         palca base 126.45   145           18335.25
luis         memorias    36.05     45             1622.25
                                                            ----------------
               o sea(sum(total)                        34107,5            3(*)                                          
3(*) el total de articulos o de registros de luis.


¿?alguien lo ocurre una solución para esta consulta¿?
ya en el siguiente paso haber como efectuo el l salto de página kdo se cambia el nombre.
gracias por haberme soportado hasta aqui.
espero vuestra colaboracion.
un cordial saludo.

eso es otra consulta distinta

Avatar de jurena
Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5

(Nivel 5 - 729 posts)

#5 Offline jurena Usuario 15 abr 08 (17:36) Valor Valor Valor  
1) yo añadiría a tu primera consulta el id y tal vez usaría INNER JOIN en lugar de los where, pero esa segunda parte no te la toco...
select cliente.id, cliente.nombre,producto.descrp,producto.precio,compra.cantidad,producto.precio * compra.cantidad AS total from
cliente,producto,compra where compra.id_cliente =cliente.id and
compra.id_prod=producto.id

2) la segunda consulta la harías mediante GROUP BY por el id de cliente. Prueba esta, porque yo no lo he hecho.
SELECT cliente.nombre, SUM (producto.precio*compra.cantidad) as total, SUM (cantidad) AS totalartículos, COUNT(compra.id) as totalregistros FROM cliente INNER JOIN compra ON cliente.id = compra.id_cliente INNER JOIN producto ON producto.id = compra.id_prod GROUP BY cliente.id ORDER BY cliente.nombre

Ahora, lo primero es sacar los datos bien y como quieres; luego veremos lo del corte, pues, como te dije, creo que eso lo solucionarás con la sintaxis de la clase que estés utilizando para el PDF. Lanza, pues, esta consulta anterior a ver qué sucede; naturalmente puedes añadir referencias a fecha, etc., pero ahora saca sólo esto.

Re: ruptura por una tabla

Avatar de lakers
Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2

(Nivel 2 - 47 posts)

#6 Offline lakers Usuario 15 abr 08 (19:54)  
gracias maestro
la consulta està bien mas o menos me faltaria solamente retocarla un pko.
lo que me comentaste tio con respecto a la libreria para generar pdf no da mucho juego en este tema o sea te permite añadir fecha,hora,titulo,
pero mi intención ahora es que a cada vez que se cambie el nombre se genera un nuevo informe(factura) en pdf con los datos del cliente y el total de su compra.¿?la cosa que no me parece nada facil¿? tampoco se me ocurre una idea al respecto.
no sé si os ocurra una idea a solucionar eso!!!!!!!!!!!!!!!!!!!!!!!!
muchisima gracias don Ureña tu el resto de los compañeros.
saludos

Re: ruptura por una tabla

Avatar de lakers
Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2

(Nivel 2 - 47 posts)

#7 Offline lakers Usuario 15 abr 08 (20:06)  
se me olvido mandarte de la pagina donde baje la clase para generar el pdf :
también serviria para los demás compañeros si le haga falta.
http://blog.unijimpe.net/generar-pdf-con-php/
saludos

poco puedo ayudarte con lo del PDF

Avatar de jurena
Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5

(Nivel 5 - 729 posts)

#8 Offline jurena Usuario 15 abr 08 (22:20)  
Te diré que poca ayuda puedo darte, porque yo no la he usado y quiero empezar, aunque probablemente usaré TCPDF ya que admite UTF-8 y tiene muy buena documentación con ejemplos de todo tipo, algunos con corte de página. Te recuerdo que esa clase que tú usas debe tener alguna función para hacer salto de página, concretamente creo que una de ellas es ezNewPage, eso parece decir en el manual.
Yo no lo he usado, pero si tú pruebas en alguna iteración de los datos de los clientes, es decir dentro de un while al final, tal vez te lleves alguna sorpresa y verás que cada nombre aparece en una página distinta. Luego sólo tendrás que acomodar la consulta completa y situar la función en el lugar apropiado. No obstante, no puedo asegurarte nada, pues no lo he puesto a prueba. Esperemos que alguien con experiencia te eche una mano.
Suerte

Re: ruptura por una tabla

Avatar de lakers
Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2

(Nivel 2 - 47 posts)

#9 Offline lakers Usuario 15 abr 08 (23:46)  
gracias maestro
la verdad no tengo palabras para agradecer tu ayuda,siguire buscando haber si pillo algo por alli
saludos

Re: ruptura por una tabla

Avatar de lakers
Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2 Nivel 2

(Nivel 2 - 47 posts)

#10 Offline lakers Usuario 16 abr 08 (21:23)  
aqui estoy de nuevo (que pesado soy no )jejeje
pero no pienso tirar la toalla,hice este scritp basicamente lo que hace es sacar del query la columna de nombres de clientes y meterla en un array para una posterior lectura.entonces en el momento que se está recoriendo el array
una vez se cambia el nombre se genera un nuevo informe(que eso lo k falta ahora).
os dejo el script para k lo hechas un vistazo

Código PHP


c=mysql_connect("localhost","root","root") or die(" problemas al establecer la conexión");
mysql_select_db("prueba") or die ("problemas al seleccionar la base de datos");
$consulta="select cliente.nombre as nombre,
       producto.descrip,
       producto.precio,
       sum(compra.cantidad),
      sum(producto.precio * compra.cantidad) AS total
from cliente,producto,compra
where  compra.id_cliente = cliente.id
  and  compra.id_prod = producto.id
group by cliente.nombre,
         producto.descrip,
         producto.precio";
$r=mysql_query($consulta,$c) or die ("error al ejecutar la query ");
$cont=0;
$num_res=mysql_num_rows($r);

$row=mysql_fetch_array($r);
/*aqui lo que hago es el resultado del query que son 5 columnas
guardo solamente la lo que es la primera columna que es el nombre
de cada cliente y lo meto en un array para que posteriormente
mediante do while puedo recorrer el array e ir preguntando si el
nombre es distinto y me efectua el salto
*/
$nombre = $row["nombre"];
$total = 0;
do {
    if($nombre != $row["nombre"]) {
        echo "Salto de pagina pdf-- "; /*aki habrá k efectuar la llamada al pdf k no
                                                                                           se  como meterle mano
        $total = 0;                               entonces una vez que se cambia el nombre
                                                       habrá que mostrar un nuevo pdf con el total
                                                                                                        de compra del cliente nuevo. asi sucesivmente*/  
        $nombre = $row["nombre"];
    }
    
    echo $nombre."  --  ";
    $total++;
    echo $total;
} while($row=mysql_fetch_array($r));
mysql_free_result($r);
mysql_close($c);
exit;


venga animooooooooooooo jurena y compañia
espero vuestras colaboracion
saludos

Responder mensaje

Para poder participar debes estar registrado e identificado. Si no estás registrado como usuario de PHP-Hispano, :: Registrar ::
Login / Password   

Web alojada en Zilos

php-hispano.net 2002 - 2008 | XHTML 1.0
Datos Legales | Webmaster