Duda en mysql!

Iniciado por HaX991, 12 Noviembre 2011, 14:25 PM

0 Miembros y 1 Visitante están viendo este tema.

HaX991

Hola a todos

bueno llevo todo el dia con esto y no me sale haber si alguien me puede ayudar un poco. Tengo 3 tablas en una base de datos una llamada libros donde aparece el nombre del libro y el importe en euros, luego tengo otra donde estan los clientes o compradores donde aparece el nombre del cliente, su direccion... y por ultimo otra que se llama compras donde aparece el id del libro comprado y el id del cliente. (esos ids son consecutivos y use auto_incremente...)

Bueno necesito en UNA sola consulta obtener el nombre de los clientes que han comprado al menos un libro y el numero total de libros comprados ordenados decrecientemente por el numero total de libros comprados.

muchas gracias!!
saludos!!

fran800m

Si llevas todo el día con eso algo tendrás hecho. Postealo.

HaX991

#2
tengo muchas consultas hechas la que mas se acerca es esta

SELECT `compradores`.`nombre` FROM `compradores`, `compras` WHERE `compras`.`id_comprador` = `compradores`.`registro`

registro y id_comprador = INT(9) UNSIGNED AUTO_INCREMENT ( el id de cada cliente y compra )

solo me salta que me muestre el numero de libros que cada cliente compro.. ( porque lo de ordenarlos y eso se como es )

saludos!

fran800m

Si el id_comprador de la tabla compradores es registro solo te falta agrupar, contar y ordenador.

¿Tienes claro el uso del agrupamiento? Lo tienes casi hecho

HaX991

hola
pues lo de agrupar si puedes expicamelo porque no me sale al agruparlos me sale un unico registro con todo unido es decir me sale en lugar de los 8 clientes que puse de prueba me sale uno solo con el total al lado asi

comprador | total de libros

lo que quiero es que salga asi

comprador 1 | libros comprados
comprador 2 | libros comprados ..
...

que me salga los libros de cada comprador las tablas son estas
Código (sql) [Seleccionar]

CREATE TABLE IF NOT EXISTS `libros` (
`registro` INT(9) UNSIGNED AUTO_INCREMENT,
`titulo` VARCHAR(35),
`escritor` VARCHAR(35),
`editorial` VARCHAR(20),
`soporte` SET('LIBRO', 'CD', 'DVD'),
`fecha` DATETIME,
`pais` VARCHAR(20),
`importe_euros` FLOAT(8,3),
`anotaciones` BLOB,
PRIMARY KEY (`registro`, `titulo`, `pais`),
UNIQUE (`registro`)
);

CREATE TABLE IF NOT EXISTS `compradores` (
`registro` INT(9) UNSIGNED AUTO_INCREMENT,
`nombre` VARCHAR(35),
`fecha_nacimiento` DATETIME,
`telefono` VARCHAR(10),
`domicilio` VARCHAR(35),
`poblacion` VARCHAR(25),
`anotaciones` TEXT,
PRIMARY KEY (`registro`, `nombre`),
UNIQUE (`registro`)
);

CREATE TABLE IF NOT EXISTS `compras` (
`registro` INT(9) UNSIGNED AUTO_INCREMENT,
`id_comprador` INT(9) UNSIGNED,
`id_libro` INT(9) UNSIGNED,
PRIMARY KEY (`registro`),
UNIQUE (`registro`)
);


muchas gracias!!

HaX991

Hola

bueno ya me las arregle yo

hice esto

Código (sql) [Seleccionar]

/*Obtenemos el nombre de los compradores que han comprado al menos un libro, el numero de libros comprados ordenados decrecientemente por el numero
total de libros comprados*/
SELECT `compradores`.`nombre`, COUNT(*) FROM `compradores`, `compras` WHERE `compras`.`id_comprador` = `compradores`.`registro` GROUP BY `compradores`.`nombre` ORDER BY COUNT(*) DESC;


y me da como resultado:

ramon    2
will            2
pablo    1
sergio    1
leito      1
antonio    1

justo lo que queria

gracias de todas formas!