Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/01/2006, 05:43
dolarsrg
 
Fecha de Ingreso: julio-2003
Mensajes: 209
Antigüedad: 20 años, 10 meses
Puntos: 0
Selección de campos heredados y agrupados por número de apariciones

Hola a todos:

Tengo un problema al intentar hacer una selección múltiple en una base de datos SQL por el número de apariciones de unos registros determinados.

La base de datos simula la gestión de Videojuegos y Películas de un videoclub, y mi intención es hacer una selección que te muestre los 25 videojuegos más solicitados (tanto alquilados como comprados) y otro listado de 25 igual pero sólo para películas.

El problema me aparece por que toda esta información está repartida entre varias bases de datos, que son estas:

CODIGOS_BARRAS: Guarda los códigos de barras ficticios de los artículos que habría en el videoclub:
Código PHP:
CREATE TABLE codigos_barras
(
  
codigo_barras varchar(13NOT NULL,
  
CONSTRAINT codigos_barras_pkey PRIMARY KEY (codigo_barras)


VIDEOJUEGOS: relaccionaría los codigos de barras con la información sobre los videojuegos:
Código PHP:
CREATE TABLE videojuegos
(
  
codigo_barras varchar(13NOT NULL,
  
id_plataformas int2,
  
id_distribuidora int2,
  
id_genero int2,
  
titulo varchar(20),
  
sinopsis varchar(100),
  
ruta_portada varchar(100),
  
en_alquiler int2,
  
en_venta int2,
  
precio int2,
  
CONSTRAINT videojuegos_pkey PRIMARY KEY (codigo_barras),
  
CONSTRAINT videojuegos_codigo_barras_fkey FOREIGN KEY (codigo_barrasREFERENCES codigos_barras (codigo_barrasON UPDATE NO ACTION ON DELETE NO ACTION,
  
CONSTRAINT videojuegos_id_distribuidora_fkey FOREIGN KEY (id_distribuidoraREFERENCES distribuidoras (id_distribuidoraON UPDATE NO ACTION ON DELETE NO ACTION,
  
CONSTRAINT videojuegos_id_genero_fkey FOREIGN KEY (id_generoREFERENCES generos (id_generoON UPDATE NO ACTION ON DELETE NO ACTION,
  
CONSTRAINT videojuegos_id_plataformas_fkey FOREIGN KEY (id_plataformasREFERENCES plataformas (id_plataformasON UPDATE NO ACTION ON DELETE NO ACTION

Y PELICULAS lo mismo pero para las películas:
Código PHP:
CREATE TABLE peliculas
(
  
codigo_barras varchar(13NOT NULL,
  
id_distribuidora int2,
  
id_formato int2,
  
id_genero int2,
  
titulo varchar(20),
  
sinopsis varchar(100),
  
director varchar(20),
  
actores varchar(50),
  
duracion int2,
  
ruta_portada varchar(100),
  
en_alquiler int2,
  
en_venta int2,
  
precio int2,
  
CONSTRAINT peliculas_pkey PRIMARY KEY (codigo_barras),
  
CONSTRAINT peliculas_codigo_barras_fkey FOREIGN KEY (codigo_barrasREFERENCES codigos_barras (codigo_barrasON UPDATE NO ACTION ON DELETE NO ACTION,
  
CONSTRAINT peliculas_id_distribuidora_fkey FOREIGN KEY (id_distribuidoraREFERENCES distribuidoras (id_distribuidoraON UPDATE NO ACTION ON DELETE NO ACTION,
  
CONSTRAINT peliculas_id_formato_fkey FOREIGN KEY (id_formatoREFERENCES formatos (id_formatoON UPDATE NO ACTION ON DELETE NO ACTION,
  
CONSTRAINT peliculas_id_genero_fkey FOREIGN KEY (id_generoREFERENCES generos (id_generoON UPDATE NO ACTION ON DELETE NO ACTION

ALQUILERES registraría todos los alquileres que ha habido:
Código PHP:
CREATE TABLE alquileres
(
  
id_alquiler int2 NOT NULL,
  
codigo_barras varchar(13),
  
id_cliente varchar(9),
  
fecha_alquiler timestamp,
  
fecha_devolucion timestamp,
  
importe int2,
  
CONSTRAINT alquileres_pkey PRIMARY KEY (id_alquiler),
  
CONSTRAINT alquileres_codigo_barras_fkey FOREIGN KEY (codigo_barrasREFERENCES codigos_barras (codigo_barrasON UPDATE NO ACTION ON DELETE NO ACTION,
  
CONSTRAINT alquileres_id_cliente_fkey FOREIGN KEY (id_clienteREFERENCES clientes (id_clienteON UPDATE NO ACTION ON DELETE NO ACTION

COMPRAS haría lo mismo para las compras:
Código PHP:
CREATE TABLE compras
(
  
id_compra int2 NOT NULL,
  
codigo_barras varchar(13),
  
id_cliente varchar(9),
  
fecha_compra timestamp,
  
cantidad int2,
  
importe int2,
  
CONSTRAINT compras_pkey PRIMARY KEY (id_compra),
  
CONSTRAINT compras_codigo_barras_fkey FOREIGN KEY (codigo_barrasREFERENCES codigos_barras (codigo_barrasON UPDATE NO ACTION ON DELETE NO ACTION,
  
CONSTRAINT compras_id_cliente_fkey FOREIGN KEY (id_clienteREFERENCES clientes (id_clienteON UPDATE NO ACTION ON DELETE NO ACTION

Ahora, ¿Cómo puedo hacer una consulta que me coja de la TABLA COMPRAS los 25 códigos de barras que más aparezcan pero que sólo pertenezcan a la base de datos PELÍCULAS? creo que los tiros irían por aquí:

Código PHP:
select compras.codigo_barras,count(compras.codigo_barras) as total from compras group by compras.codigo_barras order by total desc limit 25 
Pero a esta consulta le falta de tooodo, por que me agrupa todos los códigos de barras por su número de aparición y me los ordena, pero no me filta por videojuego/película...

Espero que me podais ayudar. Os lo agradezco un montón