Bases de Datos - Consulta Select Count(*) MySQL

   
Vista:

Consulta Select Count(*) MySQL

Publicado por Lina (5 intervenciones) el 21/05/2016 19:10:01
Hola, lo que quiero hacer es lo siguiente

Tengo dos tablas pedidos y pedidoproducto ellas se relacionan por el idPedido.

Necesito contar los pedidos que x cliente ha hecho a x producto algo asi

SELECT COUNT(*) FROM pedido, pedidoproducto WHERE pedido.cedulaCliente= 99999 AND pedidoproducto.codigoProducto=1;

La consulta me arroja valores no correctos. No se si estoy realizando bien la consulta.

Agradecería mucho que me ayuden.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Consulta Select Count(*) MySQL

Publicado por Gonzalo (16 intervenciones) el 21/05/2016 22:01:44
1
2
3
SELECT COUNT(*)
 FROM pedido, pedidoproducto
WHERE pedido.cedulaCliente= 99999 AND pedidoproducto.codigoProducto=1;

Ok... ¿Y cómo se relacionan las tablas pedido y pedidoproducto?
Si no le indicas específicamente qué campos se relacionan, MySQL intentará relacionarlas por campos que tengan igual nombre, lo que pueda dar resultados erróneos, debidos entre otras cosas al vicio de los programadores de usar nombres como "ID", en lugar de denominaciones mas precisas, como PEDIDO_ID y PRODUCTO_ID, por ejemplo...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta Select Count(*) MySQL

Publicado por Lina (5 intervenciones) el 22/05/2016 01:48:32
No las relacionó porque necesito contar todos los pedidos no uno solo que al hacer la cláusula WHERE pedidos.idPedido= pedido producto.idPedido sólo traería una
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta Select Count(*) MySQL

Publicado por Gonzalo (16 intervenciones) el 23/05/2016 13:04:47
Bueno, eso significaría que tienes la tabla de pedidos muy mal diseñada...
A ver si se entiende: Un Pedido posee una serie de datos propios del pedido como entidad conceptual: Número de Pedido, Fecha, Cliente, y puede que importe total. Pero además tiene un DETALLE de PEDIDO, compuesto por todos los productos incluidos en tal Pedido, con la cantidad y eventualmente el importe de descuento aplciado si lo hay.
Esto significa que un pedido son DOS TABLAS: Pedido y DetallePedido. Es lo que se denomina relación Maestro-Detalle.
A su vez, DetallePedido se relaciona con Producto, una vez por cada producto incluido en el detalle de cada pedido. Esta relación es lo que permite determinar qué pedidos de qué cliente incluyen un determinado producto.
Aclarado ese punto, si estás relacionando un pedido con un único producto, entonces tu diseño está mal.

Si lo que quieres es determinar la cantidad de pedidos totales que se han realizado, la tabla productos es irrelevante.
Si deseas saber cuandtos pedidos han incluido un determinado producto, forzosamente tienes que indicar la relación entre Producto y Pedido... De lo contrario tal cálculo es IMPOSIBLE.

En tu caso, como usas directamente la coma, que representa el JOIN implícito, la consulta genera lo que se denomina producto cartesiano, que es la peor forma de consulta posible, y que en tu caso es altamente probable que esté devolviendo datos erróneos.

¿Tienes claro lo que es un producto cartesiano, y por qué te digo que puede devolver datos erróneos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta Select Count(*) MySQL

Publicado por Lina (5 intervenciones) el 23/05/2016 16:35:12
La base de datos esta exactamente como la mencionas.

Existe la tabla producto que se relaciona de muchos a muchos con la tabla pedidos, por tal razón se crea la tabla de rompimiento llamada pedidoproducto (que seria la DetallePedido) que tiene idPedido y codigoProducto, entre otros datos.

Lo que mencionas de producto cartesiano no lo había escuchado o leído alguna vez.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta Select Count(*) MySQL

Publicado por Gonzalo (16 intervenciones) el 23/05/2016 20:58:24
Ok, ya viendo que tienes entonces bien diseñada la tabla, vamos a tu consutla:
1
SELECT COUNT(*) FROM pedido, pedidoproducto WHERE pedido.cedulaCliente= 99999 AND pedidoproducto.codigoProducto=1;
Esta consulta está MAL, porque se puede generar un producto cartesiano (Lección número 2 en la asignatura Bases de Datos, no se puede desconocer), ya que no estás indicando la relación. En caso de usar la coma, estás haciendo un JOIN implícito, donde MySQL intentará emparejar las columnas que posean el mismo nombre... y si esas columnas no tienen EXACTAMENTE el mismo nombre,el resultado peude ser inconsistente.
Como no sé si en las tablas origen los nombres de las columnas son correctos, no puedo decirte con certeza si el JOIN lo está haciendo bien. Eso lo sabrás tu.

Ahora bien, para asegurarnos que estés contando correctamente sólo la cantidad de PEDIDOS de un mismo CLIENTE donde se haya realizado pedido de un determinado PRODUCTO, tienes que asegurarte que sean diferentes pedidos, y eliminar la posibilidad de que el mismo producto pueda haber sido ingresado dos veces en un mismo pedido.

1
2
3
SELECT COUNT(DISTINCT P.idpedido) TotalPedidos
FROM pedido P INNER JOIN pedidoproducto PP ON p.idpedido = pp.idpedido
WHERE p.cedulaCliente= 99999 AND pp.codigoProducto=1;

NO USES JOIN IMPLICITOS. Usa JOINS explícitos (INNER JOIN, LEFT JOIN, RIGH JOIN).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Leonardo Daniel A.

Consulta Select Count(*) MySQL

Publicado por Leonardo Daniel A. (43 intervenciones) el 23/05/2016 21:36:42
A ver si te entendi

Tablas: Pedidos se relaciona con Clientes y con PedidosProductos

dices que quieres el total de peidos de un Cliente de "x" producto, supongo que se ingresara manualmente el codigo del cliente y el codigo del producto....

No se porque se complican tanto, selecciona contando el id_pedido de pedidos, donde el cliente sea = 1 y id_pedido de ese pedido del cliente se encuentre en pedidos y ese id_pedido este en detalle_pedidos donde el articulo = 2

probado y comprobado, adjunto imagenes de las tablas con datos, esto si solo te interesa sacar el total de pedidos, ya si quisieras un listado de todos los pedidos y productos, pues habria que usar los joins

SELECT COUNT(id_pedido) FROM pedidos WHERE
id_cliente = 1 AND id_pedido
IN (SELECT id_pedido FROM detalle_pedidos WHERE id_articulo = 2 )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta Select Count(*) MySQL

Hola que Tal primero que nada estas haciendo tu consulta mal checa bien tus sintaxis porque así no se hacen



SELECT COUNT(DISTINCT P.idpedido) TotalPedidos
FROM pedido P INNER JOIN pedidoproducto PP ON p.idpedido = pp.idpedido
WHERE p.cedulaCliente= 99999 AND pp.codigoProducto=1;


Espero y te sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta Select Count(*) MySQL

Publicado por Ana Ladi (1 intervención) el 02/06/2016 21:30:38
1
2
3
SELECT COUNT(DISTINCT P.idpedido) TotalPedidos
FROM pedido P INNER JOIN pedidoproducto PP ON p.idpedido = pp.idpedido
WHERE p.cedulaCliente= 99999 AND pp.codigoProducto=1;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta Select Count(*) MySQL

Publicado por Susana Salazar (1 intervención) el 09/06/2016 22:43:02
La consulta quedaría hací, espero y te sirva

1
2
3
SELECT COUNT(DISTINCT P.idpedido) TotalPedidos
FROM pedido P INNER JOIN pedidoproducto PP ON p.idpedido = pp.idpedido
WHERE p.cedulaCliente= 99999 AND pp.codigoProducto=1;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta Select Count(*) MySQL

Publicado por Salaicez (1 intervención) el 09/06/2016 22:46:01
El problema es que tu base no está bien diseñada, pero puedes usar el siguiente código

SELECT COUNT(DISTINCT P.idpedido) TotalPedidos
FROM pedido P INNER JOIN pedidoproducto PP ON p.idpedido = pp.idpedido
WHERE p.cedulaCliente= 99999 AND pp.codigoProducto=1;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta Select Count(*) MySQL

Publicado por Brian (1 intervención) el 27/06/2016 03:46:52
Espero te sirva


SELECT COUNT(DISTINCT P.idpedido) TotalPedidos

FROM pedido P INNER JOIN pedidoproducto PP ON p.idpedido = pp.idpedido

WHERE p.cedulaCliente= 99999 AND pp.codigoProducto=1;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar