Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Cuarto tabla enlazada

Estas en el tema de Cuarto tabla enlazada en el foro de Bases de Datos General en Foros del Web. Tengo una base de datos de la siguiente forma... 4 Tablas clientes(nuke_customers_mb) id_customer name_customer status_customer banners(nuke_banners_mb) id_banner id_customer url_banner redirect_banner zone_banner lv_banner status_banner views(nuke_views_mb) id_view ...
  #1 (permalink)  
Antiguo 24/06/2005, 17:35
m4ltos
Invitado
 
Mensajes: n/a
Puntos:
Cuarto tabla enlazada

Tengo una base de datos de la siguiente forma...

4 Tablas

clientes(nuke_customers_mb)
id_customer
name_customer
status_customer

banners(nuke_banners_mb)
id_banner
id_customer
url_banner
redirect_banner
zone_banner
lv_banner
status_banner

views(nuke_views_mb)
id_view
ip_view
date_view
id_banner
counter_view

clicks(nuke_clicks_mb)
id_click
ip_click
date_click
id_banner
counter_click


Estoy tratando de mostrar

views - impresiones totales de un banner
clicks - "aqui es donde no he llegado"
id - id del banner
customer - el cliente de dicho banner
url - direccion web donde se encuentra el banner

El string de mysql al que logre llegar es el siguiente...

Código PHP:
$qry "
select
    sum(c.counter_view) as views,
    b.id_banner,
    a.name_customer,
    b.url_banner
from
    nuke_customers_mb as a,
    nuke_banners_mb as b,
    nuke_views_mb as c
where
    a.id_customer = b.id_customer and
    b.id_banner = c.id_banner
group by
    b.id_banner
order by
    name_customer,counter_view desc
"

Y hasta aqui tengo los valores tal cual los necesito (sin poder mostrar los clicks), pero me faltan los clicks que ha recibido cada banner, he querio enlazar con la cuarta tabla pero a la hora de que hago el enlace pasan dos cosas.

1 La salida de views o sea sum(c.counter_view) se va hasta el total de multiplicar este valor por el numero de filas que tenga la tabla nuke_clicks_mb que es la que estoy tratando de enlazar.

2 La fila de clicks proveniente de nuke_clicks_mb tiene un valor de su primera fila, y las demas no logro sumarlas.

Entiendo entonces que tengo un problema de agrupacion pero no se cual sea.


Se que esto es un problema muy especifico, he pasado gran parte del dia tratando de encontrar un problema mas sin embargo apenas tengo poco tiempo usando mysql.

Si alguien tiene la respuesta me seria de mucha ayuda.

Me han sugerido usar recorrer con php cada fila y hacer la retraccion de la ultima tabla por separado, mas sin embargo se que en algun momento voy a tener que aprender a hacerlo con un cuarto enlace por eso me interesa resolver esta duda.

---

Esto es a lo que llegue

Código:
Views	Id	Customer			URL
86858	78	Alice Restaurante		banners/1119486634.jpg
303038	63	American National Bank		banners/1119479239.gif
85786	180	Gillman				banners/1119638821.jpg
122074	181	Glosserman			banners/1119638920.jpg
245458	77	Lockhart Motor Co		banners/1119479266.gif
412758	66	Outlet				banners/1119479297.gif
16	178	Post Register			banners/1119479586.gif
38921	179	West Motors			banners/1119638314.jpg
  #2 (permalink)  
Antiguo 25/06/2005, 13:35
m4ltos
Invitado
 
Mensajes: n/a
Puntos:
Bueno por lo que veo creo que al enlazar 2 tablas dependientes de una que a su ves depende de otra se genera un doble enlace que multiplica por n filas de la ultima enlazada, y ahi empieza la bronca.

Total que opte por tomar los resultados y hacer una union con la tercera tabla usando una intermediaria heap o temporal.

Aqui dejo la solucion usando ANSII

Código:
drop table if exists views;
create table views TYPE=HEAP
select
 b.id_banner,
 sum(c.counter_view) as views,
 a.name_customer,
 b.url_banner
from
 nuke_customers_mb as a
inner join
 nuke_banners_mb as b
inner join
 nuke_views_mb as c
on
 a.id_customer = b.id_customer and
 b.id_banner = c.id_banner
group by
 b.id_banner
order by
 a.name_customer;

select
 a.id_banner,
 a.views,
 sum(b.counter_click) as clicks,
 a.name_customer,
 a.url_banner
from
 views a
inner join
 nuke_clicks_mb as b
on
 a.id_banner = b.id_banner
group by
 b.id_banner
;
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 19:37.