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

Estructurar tablas de mi Base de datos

Estas en el tema de Estructurar tablas de mi Base de datos en el foro de Mysql en Foros del Web. Que tal gente... Hace poco que estoy haciendo "cosas" con MySQL luego de haber cursado PHP y MySQL (este último, muy superficialmente) Les consulto sobre ...
  #1 (permalink)  
Antiguo 22/08/2010, 23:59
Avatar de Mono-R  
Fecha de Ingreso: abril-2006
Ubicación: Bs. As. Argentina
Mensajes: 155
Antigüedad: 18 años
Puntos: 1
Pregunta Estructurar tablas de mi Base de datos

Que tal gente...

Hace poco que estoy haciendo "cosas" con MySQL luego de haber cursado PHP y MySQL (este último, muy superficialmente)
Les consulto sobre como debiera organizar las tablas de mi proyecto:
Es un sitio de ventas de revistas, por el momento unas 4 solamente.

Creé las siguientes tablas innodb:


Código:
libros

id_libros int(11) 
id_usuario_fk int(11) 
fecha timestamp  CURRENT_TIMESTAMP    
titulo varchar(100) 
autor varchar(30)
descripcion mediumtext 
caracteristica mediumtext 
precio_arg varchar(5) 
precio_usa varchar(5) 
precio_int varchar(5)
stock_arg int(10) 
stock_usa int(10) 
imagen varchar(100)

PRIMARY PRIMARY 4  id_libros id_usuarios_fk INDEX 2  id_usuario_fk



libros_ventas

id_libros_ventas int(11)    
id_libros_fk int(11)   
id_transaccion_fk varchar(50)
cant_libros int(11) 

PRIMARY PRIMARY 8  id_libros_ventas id_transaccion INDEX 4  id_transaccion_fk id_libros_fk INDEX 8  id_libros_fk 



ventas

id_ventas int(11)  
id_transaccion varchar(50)
mail varchar(30) 
id_comprador varchar(50) 
pais varchar(20)
ciudad varchar(30)
fecha varchar(40)
importe int(11)
envio int(11)
detalle mediumtext 

PRIMARY PRIMARY 7  id_ventas id_transaccion_fk INDEX 7  id_transaccion

Me gustaría me puedan orieantar como estructurar las tablas y referenciarlas...
Como puedo lograr tener bajo un mismo "id_transacion" las cantidades compradas de cada revista, de tal manera que si agrego una nueva revista no se tenga que generar una nueva columna. He probado con columnas fijas donde ingreso la cantidad de revistas compradas pero eso me deja de servir en el caso de agregar dinámicamente una nueva revista.

Espero su ayuda!
desde ya muchas gracias!
__________________
:-) ... cuanto más intento aprender descubro lo poco que se ... :pensando:
  #2 (permalink)  
Antiguo 24/08/2010, 18:01
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Estructurar tablas de mi Base de datos

Hola
a ver si entendi, tu dices

"Como puedo lograr tener bajo un mismo "id_transacion" las cantidades compradas de cada revista, de tal manera que si agrego una nueva revista no se tenga que generar una nueva columna. He probado con columnas fijas donde ingreso la cantidad de revistas compradas pero eso me deja de servir en el caso de agregar dinámicamente una nueva revista."

si bien comprendo lo que dices, tu lo que quieres es no generar otro registro si es la misma revista en la misma compra? o porque hablas de una nueva columna? si es lo que entendí, entonces con eso que tienes bastaría, y obviamente cuando compres una revista que ya tienes en la compra actual, tendrías que actualizar la revista que estas comprando, es decir, si ya habias comprado una revista "cosmo", entonces al querer llevar otro ejemplar, lo que vas a hacer es comparar la que estas comprando contra la que ya compraste, y como en este ejemplo coinciden, entonces simplemente actualizas la cantidad de revistas "cosmo" que llevaras, e igualmente esto influira en el valor a pagar (valor unitario * cantidad), es eso a lo que te refieres? espero que si
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 24/08/2010, 23:31
Avatar de Mono-R  
Fecha de Ingreso: abril-2006
Ubicación: Bs. As. Argentina
Mensajes: 155
Antigüedad: 18 años
Puntos: 1
Respuesta: Estructurar tablas de mi Base de datos

Gracias mortiprogramador por tomarte el tiempo en responderme.

Mira, como explico, soy novato con MySQL, y en este caso no se si estoy estructurando bien mis tablas o es que no realizo bien la consulta "SELECT..."

En la tabla "libros_ventas" voy guardando las revistas que se compran, estas tienen en común un "id_transaccion". En la tabla "ventas" guardo lo detalles referentes al pago.


libros_ventas:

id_libros_ventas
id_transaccion
cant_libros

el tema es que así como lo tengo planteado genero x filas con un mismo "id_transaccion" para cada cantidad de revistas compradas, y cuando las llamo me sale cualquier cosa. Tal ves estoy bien con las tablas y lo que realizo mal es la consulta.

"SELECT * FROM ventas, libros_ventas WHERE id_transaccion=id_transaccion_fk ORDER BY id_ventas DESC ";


Originalmente esta consulta la usaba con una tabla libros_ventas que tenia 4 campos para cada revista (revista1, revista2...), pero no me sirve, pues si genero nuevas revistas dinámicamente, debo luego modificar la tabla con un campo extra!
Por eso opte por hacer varios registros con el mismo id_transaccion.

Espero haber sido mas claro ahora, disculpen si no expreso los términos de la mejor manera, ya mejoraré en esos conceptos también!

Saludos!
__________________
:-) ... cuanto más intento aprender descubro lo poco que se ... :pensando:
  #4 (permalink)  
Antiguo 25/08/2010, 13:45
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Estructurar tablas de mi Base de datos

bueno,así las cosas necesitarias un AND en la consulta si quieres consultar una transacción en especifico, pues hasta donde lo tienes en efecto el traera todas las coincidencias, sin realizar filtro entre las mismas, así que agregando el AND quedaría algo así

Ej:
Código MySQL:
Ver original
  1. "SELECT * FROM ventas, libros_ventas WHERE id_transaccion=id_transaccion_fk AND id_transaccion = 10 ORDER BY id_ventas DESC ";

prueba y comentas
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #5 (permalink)  
Antiguo 25/08/2010, 14:29
Avatar de Mono-R  
Fecha de Ingreso: abril-2006
Ubicación: Bs. As. Argentina
Mensajes: 155
Antigüedad: 18 años
Puntos: 1
Respuesta: Estructurar tablas de mi Base de datos

Cita:
Iniciado por mortiprogramador Ver Mensaje
bueno,así las cosas necesitarias un AND en la consulta si quieres consultar una transacción en especifico, pues hasta donde lo tienes en efecto el traera todas las coincidencias, sin realizar filtro entre las mismas, así que agregando el AND quedaría algo así

Ej:
Código MySQL:
Ver original
  1. "SELECT * FROM ventas, libros_ventas WHERE id_transaccion=id_transaccion_fk AND id_transaccion = 10 ORDER BY id_ventas DESC ";

prueba y comentas
saludos

mortiprogramador, muchas gracias nuevamente por tu tiempo!
Mira, respecto a los "AND", ya había realizado pruebas sin éxito, de todas maneras obviamente probé la línea que me siguieres y tampoco hace lo que quiero.

Como todo buen "forero" (o cualquier persona que intenta aprender por sobre que le hagan el trabajo! jaja) seguí probando y leyendo, hasta llegar a obtener los resultados deseados. Aunque no estoy del todo conforme ya que por ahora lo logro haciendo dos consultas, pues no logré hacerla en una sola:



Código PHP:
$query " SELECT * FROM ventas
                  INNER JOIN libros_ventas ON ventas.id_transaccion=libros_ventas.id_transaccion_fk 
               WHERE  id_transaccion='$id_transaccion'"
;


            
$query2 " SELECT * FROM libros_ventas    
                        INNER JOIN libros ON libros.id_libros=libros_ventas.id_libros_fk 
                                WHERE  id_transaccion_fk='$id_transaccion'"


Con este bucle muestro en pantalla las cantidades compradas.
Estas se guardan el la tabla libros_ventas en filas diferentes con un mismo id_transaccion (esto es lo que tenia dudas que estuviese bien estructurado)
Código HTML:
 <?php 
		         while($fila2 = mysql_fetch_array($res2)){ 
		   ?>
                  
                  <tr>
                     <td class="td-2"><?php echo $fila2['titulo']; ?></td>
                     <td class="td-3"><?php echo $fila2['cant_libros']; ?> unidades.</td>
                  </tr>     
                  
                  <?php 
			$fila2++;
			}
		   ?> 

Cuando intento unificar las consultas el bucle me deja de funcionar!
(obviamente lo modifico para tal caso)

Bueno, espero me puedan ayudar a integrar mi consulta o diciéndome que estoy haciendo cualquier cosa con mis tablas!!! jajaja
Saludos!
__________________
:-) ... cuanto más intento aprender descubro lo poco que se ... :pensando:
  #6 (permalink)  
Antiguo 25/08/2010, 15:58
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Estructurar tablas de mi Base de datos

Hola
bueno, pues que bien que ya lo tienes,
pregunto algo, intentaste como lo tienes por joins
poner ambos joins en una sola consulta? y los 2 where
que tienes reemplazarlos por un where y un and en esa sola consulta?

pues se ven bien, yo tal vez para unirlas intentaria
lo que te digo de unir los joins en una sola consulta,
y si no me da resultado, la dejaría como la tienes
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #7 (permalink)  
Antiguo 26/08/2010, 10:06
Avatar de Mono-R  
Fecha de Ingreso: abril-2006
Ubicación: Bs. As. Argentina
Mensajes: 155
Antigüedad: 18 años
Puntos: 1
Respuesta: Estructurar tablas de mi Base de datos

Cita:
Iniciado por mortiprogramador Ver Mensaje
Hola
bueno, pues que bien que ya lo tienes,
pregunto algo, intentaste como lo tienes por joins
poner ambos joins en una sola consulta? y los 2 where
que tienes reemplazarlos por un where y un and en esa sola consulta?

pues se ven bien, yo tal vez para unirlas intentaria
lo que te digo de unir los joins en una sola consulta,
y si no me da resultado, la dejaría como la tienes
saludos
mortiprogramador. Si, tal cual dices tú, (también lo probé):

Código PHP:
            $query "SELECT * FROM ventas
                      INNER JOIN libros_ventas ON ventas.id_transaccion=libros_ventas.id_transaccion_fk
                      INNER JOIN libros ON libros.id_libros=libros_ventas.id_libros_fk
                      WHERE  id_transaccion='$id_transaccion' AND id_transaccion_fk='$id_transaccion'"

Y lo probé en el MySQL Query Browser (tarde me acordé de esta gran heramienta! jaja) y me trae los datos igual!

El problema es que en ese caso el bucle ya no me trae la primera fila del array "mysql_fetch_array()", supongo que es porque antes del bucle extraigo otros datos de ese array que son comunes a la compra. El bucle es para extraer el detalle...

Se te ocurre como podría ejecutar esto? Bueno, supongo que bastarái con colocar el bucle al principo del script y de alguna menera acomodar los contenidos para que en pantalla se sigan mostrando de la misma forma (ya que el detalle de las cantidades compradas no quedaria bien si lo imprimo antes de mostrar otros datos...)

Muchas gracias por tu colaboración!!!
Saludos!
__________________
:-) ... cuanto más intento aprender descubro lo poco que se ... :pensando:
  #8 (permalink)  
Antiguo 26/08/2010, 19:38
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Estructurar tablas de mi Base de datos

uhm, bueno, intenta usar un do...while, pues si en efecto antes haces
una operación con los primeros datos, luego en el while omita este, pero con el do...while debería incluirlo
nos comentas
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #9 (permalink)  
Antiguo 26/08/2010, 22:05
Avatar de Mono-R  
Fecha de Ingreso: abril-2006
Ubicación: Bs. As. Argentina
Mensajes: 155
Antigüedad: 18 años
Puntos: 1
Respuesta: Estructurar tablas de mi Base de datos

Cita:
Iniciado por mortiprogramador Ver Mensaje
uhm, bueno, intenta usar un do...while, pues si en efecto antes haces
una operación con los primeros datos, luego en el while omita este, pero con el do...while debería incluirlo
nos comentas
saludos
Grande mortiprogramador!
Tienes toda la razón! Como el do while ejecuta el bucle aunque sea una vez por mas que la condición sea falsa...
Sabes que lo había pensado, pero soy bastante novato con PHP (recién terminé el cursete de ambos, PHP y MySQL) y el while es el que "más " domino (por decir algo! jajaj).

Así que como dijiste tú, utilicé un do while y listo. Eso si, como luego de mostrar los resultados del bucle en pantalla, también muestro unos campos más, comunes a las filas de la consulta, lo que hice fue declararlos en variables antes del bucle, y así ya los puedo utilizar cuando desee en el script...

Muchísimas gracias por tu ayuda!!!
Saludos desde Bs. As.
__________________
:-) ... cuanto más intento aprender descubro lo poco que se ... :pensando:

Etiquetas: tablas
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 18:58.