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

Ranking de ovejas que mas litros de leche producen

Estas en el tema de Ranking de ovejas que mas litros de leche producen en el foro de Mysql en Foros del Web. Buenas , Estoy haciendo un sistema para controlar un ganado de un familiar, necesita que le haga un ranking de una forma algo especial, tengo ...
  #1 (permalink)  
Antiguo 11/08/2014, 07:57
 
Fecha de Ingreso: abril-2010
Mensajes: 267
Antigüedad: 14 años
Puntos: 1
Ranking de ovejas que mas litros de leche producen

Buenas ,
Estoy haciendo un sistema para controlar un ganado de un familiar, necesita que le haga un ranking de una forma algo especial, tengo dos tablas, una llamada ovejas que contiene el numero de chip y datos a cerca de ella, otra tabla llamada produccion en la que se guarda, el numero del chip, la fevvha y hora y los litros de leche, necesito hacer un ranking de las que mas litros de leche producen en los 6 ultimos meses, es decir, sumar todos los litros de leche de la oveja en la tabla produccion (solo los que entran en los seis ultimos meses) y ordenarlas, ¿Alguien sabría hacerlo?

Muchísimas gracias :)
  #2 (permalink)  
Antiguo 11/08/2014, 08:43
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Ranking de ovejas que mas litros de leche producen

Cita:
¿Alguien sabría hacerlo?
Si, cualquiera de nosotros, es una consulta simple con uso de LEFT JOIN, funciones de fecha, SUM() y GROUP BY, pero si no nos proporcionas la estructura de las tablas, sólo podemos ejemplificar algo imaginario, tal como:
Código MySQL:
Ver original
  1. SELECT A.chip, SUM(B.litros) litros
  2. FROM ovejas A LEFT JOIN produccion B ON A.chip = B.chip
  3. GROUP BY A.chip
Obviamente, si esos no son los nombres de las tablas o las columnas, deberás adaptar la idea a lo que tengas...

Es una consulta medio de manual. ¿Intentaste hacer algo por tu cuenta? Muéstralo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 11/08/2014, 08:53
 
Fecha de Ingreso: abril-2010
Mensajes: 267
Antigüedad: 14 años
Puntos: 1
Respuesta: Ranking de ovejas que mas litros de leche producen

Hola gnzsoloyo :),
Muchísimas gracias por tu ayuda, bueno te contesto a la pregunta, le he dado muchas vueltas, pero nunca he hecho algo así, en sql soy novato, te adjunto las tablas, como ya te he dicho, sería un ranking sencillo, en una tabla, en la que pondré posición, numero de bolo (chip) y litros, la única diferencia es que los litros los debo sumar, de diferentes filas con el mismo numero de bolo, siempre y cuando la fecha entre en los 6 últimos meses.

Tablas:

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `ovejas` (
  2.   `numero_bolo` text NOT NULL,
  3.   `fecha_nacimiento` text NOT NULL
  4.  
  5.  
  6. CREATE TABLE IF NOT EXISTS `producción` (
  7.   `numero_bolo` text NOT NULL,
  8.   `fecha` date NOT NULL,
  9.   `hora` time NOT NULL,
  10.   `litros` text NOT NULL

[/CODE]

Última edición por gnzsoloyo; 11/08/2014 a las 13:15
  #4 (permalink)  
Antiguo 11/08/2014, 13:15
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Ranking de ovejas que mas litros de leche producen

Tienes al menos cuatro defectos en esas tablas:
1) "numero_bolo" no puede ser TEXT. Estamos hablando de un identificador que deberías ser PK en una tabla y FK en otra, y para eso no puede ser TEXT.
Un chip, si es el caso descripto, no puede tener un identificador de 4 Kb.
Como mucho la longitud debería ser de 128 o 256 bytes, pero no más. Y si es numérico habría que ver cuán largo es.
2) Una "fecha_nacimiento" es DATE, DATETIME o TIMESTAMP, pero no puedes ponerla como VARCHAR. Con eso sólo te garantizarás problemas y datos basura (se llama así a los datos corruptos o inconsistentes).
3) Si "produccion" tiene una relación 1:N con "oveja", el campo "nrumero_bolo" deberia ser FK, cosa que no has definido.
4) "litros" no puede ser TEXT, lel concepto es una magnitud y debe ser numérica, como toda magnitud. Puedes hacerla INT UNSIGNED, DECIMAL, o bien FLOAT, pero debe ser numérica.

Recién con eso podríamos aplicar la query correctamente. Sin esos cambios, no se podrá hacer una consulta respetable ni consistente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 11/08/2014, 15:03
 
Fecha de Ingreso: abril-2010
Mensajes: 267
Antigüedad: 14 años
Puntos: 1
Respuesta: Ranking de ovejas que mas litros de leche producen

Hola gnzsoloyo,
Muchas gracias, a que te refieres con pk y fk ? :/
El bolo es el nombre del tipo de chip de la oveja, lo forma 15 dígitos de letras y números.
Creo que he hecho correctamente los cambios en todos los puntos excepto en el 1 y 3 ya que no soy muy enterado en sql XD, perdoname pero no he comprendido lo que me querias decir :/
  #6 (permalink)  
Antiguo 11/08/2014, 15:26
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Ranking de ovejas que mas litros de leche producen

Hola alejandromaringomez:

Cita:
a que te refieres con pk y fk ? :/
pk: Primary Key o Llave primaria

fk: Foreign Key o Llave Foránea (es decir, una llave primaria de una tabla relacionada)

El tener un correcto manejo de llaves es primordial en cualquier modelo Entidad-Relación, como diría un maestro que tuve: Un modelo E-R sin integridad referencial, es simplemente un montón de basura.

Cita:
El bolo es el nombre del tipo de chip de la oveja, lo forma 15 dígitos de letras y números.
Creo que no te tomaste el tiempo para verificar los tipos de datos y lo que pueden almacenar... si el tipo de chip de una oveja es un alfanumérico de 15 posiciones, entonces utilizas VARCHAR(15), no un tipo TEXT.

Saludos
Leo
  #7 (permalink)  
Antiguo 11/08/2014, 15:38
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Ranking de ovejas que mas litros de leche producen

Exactamente como te dice Leonardo_Josue.
Antes que nada debes tener en claro lo que es el modelo entidad-relación y los sistemas de bases de datos relacionales. Sin eso empezarás a probar al tuntún, y terminarás reinventando la rueda infinitas veces, con cantidades innumerables de avances y retrocesos.
El tema no es difícil, no es mucho mas complejo que intentar aprender a programar funciones, o comprender lo que son los objetos en POO. Si tienes algunas nociones básicas de clases, el paso al modelo E-R (por más que es otro paradigma), no resulta tan dificil de hacer.

Como sea, las tablas, para tu caso, deberían ser como mínimo así:
Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `ovejas` (
  2.   `numero_bolo` VARCHAR(15) NOT NULL PRIMARY KEY,
  3.   `fecha_nacimiento` DATE NOT NULL
  4.  
  5.  
  6. CREATE TABLE IF NOT EXISTS `producción` (
  7.   `numero_bolo` VARCHAR(15) NOT NULL,
  8.   `fecha` date NOT NULL,
  9.   `hora` time NOT NULL,
  10.   `litros` text NOT NULL,
  11. PRIMARY KEY (numero_bolo, fecha),
  12. CONSTRAINT fk_oveja (numero_bolo) REFERENCES ovejas(numero_bolo)

En la segunda tabla estoy suponiendo que sólo hay un ordeñe diario. Si hay más, la hora sería parte de la PK.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 11/08/2014, 15:38
 
Fecha de Ingreso: abril-2010
Mensajes: 267
Antigüedad: 14 años
Puntos: 1
Respuesta: Ranking de ovejas que mas litros de leche producen

Hola leonardo_josue :) ,
Muchas gracias :), he estado viendo una manera de cambiar el numero bolo a primary key con:
Cita:
ALTER TABLE table_name
ADD PRIMARY KEY(primary_key_column);
pero no me funciona con foreign key, he cambiado el numero bolo a varchar 15, ¿Cómo hago para añadirle el primary key y el foreign key?, ¿Hay alguna manera de poder hacerlo por SQL?

¡Un Saludo!
  #9 (permalink)  
Antiguo 11/08/2014, 15:39
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Ranking de ovejas que mas litros de leche producen

Cita:
Hay alguna manera de poder hacerlo por SQL?
Son cosas que sólo existen en SQL...
El tema es que hay ciertas reglas:
1) La FK sólo se puede definir si ya existe la PK a que apuntará.
2) Tiene que tener la misma cantidad de campos que la PK de origen.
3) Debe poseer el mismo tipo de dato, charset, collation y rango.
4) Si ya existen datos al momento de intentar crear la FK, los datos deben respetar la restricción impuesta por la relación FK->PK.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 11/08/2014, 15:43
 
Fecha de Ingreso: abril-2010
Mensajes: 267
Antigüedad: 14 años
Puntos: 1
Respuesta: Ranking de ovejas que mas litros de leche producen

:/ Oki, me lo apunto todo para aprendermelo :), he intentado subir el sql que me has dado pero me da el siguiente error:

Cita:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(numero_bolo) REFERENCES ovejas(numero_bolo)
) ENGINE=InnoDB DEFAULT CHARSET=la' at line 7
  #11 (permalink)  
Antiguo 11/08/2014, 15:55
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Ranking de ovejas que mas litros de leche producen

consultar con el manual de referencia: http://dev.mysql.com/doc/refman/5.0/...nstraints.html

Es lo que hacemos todos.

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `producción` (
  2.   `numero_bolo` VARCHAR(15) NOT NULL,
  3.   `fecha` date NOT NULL,
  4.   `hora` time NOT NULL,
  5.   `litros` text NOT NULL,
  6. PRIMARY KEY (numero_bolo, fecha),
  7. INDEX (nro_bolo),
  8. FOREIGN KEY  (numero_bolo) REFERENCES ovejas(numero_bolo)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: ranking, tabla
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 16:37.