Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => Bases de Datos => Mensaje iniciado por: HaX991 en 12 Noviembre 2011, 14:25 PM

Título: Duda en mysql!
Publicado por: HaX991 en 12 Noviembre 2011, 14:25 PM
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!!
Título: Re: Duda en mysql!
Publicado por: fran800m en 12 Noviembre 2011, 15:08 PM
Si llevas todo el día con eso algo tendrás hecho. Postealo.
Título: Re: Duda en mysql!
Publicado por: HaX991 en 12 Noviembre 2011, 15:12 PM
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!
Título: Re: Duda en mysql!
Publicado por: fran800m en 12 Noviembre 2011, 17:05 PM
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
Título: Re: Duda en mysql!
Publicado por: HaX991 en 12 Noviembre 2011, 17:21 PM
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!!
Título: Re: Duda en mysql!
Publicado por: HaX991 en 12 Noviembre 2011, 17:55 PM
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!