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

Asociar datos de distintas tablas

Estas en el tema de Asociar datos de distintas tablas en el foro de Mysql en Foros del Web. Buenas, estoy armando un mini sistema online con php y mysql (un poco de flash tambien). En el cual segun el nivel de usuario que ...
  #1 (permalink)  
Antiguo 11/05/2009, 21:50
 
Fecha de Ingreso: agosto-2008
Mensajes: 109
Antigüedad: 15 años, 7 meses
Puntos: 3
Asociar datos de distintas tablas

Buenas, estoy armando un mini sistema online con php y mysql (un poco de flash tambien). En el cual segun el nivel de usuario que tengas vas a poder hacer una u otra cosa. Los niveles van a ser 3 "nivel1" "nivel2" "nivel3", y los usuarios los creo yo desde la base de datos, lo que quita la necesidad de una forma de registro.

"nivel1" : solo puede ver las cosas que el compro.
"nivel2" : solo puede ver las cosas que el vendio.
"nivel3" : vendria a ser un admin que puede hacer y deshacer.

Esto no tiene intencion de ser el nuevo ebay ni nada por el estilo, es un sistema lo mas basico que se pueda para organizar un poco mi empresa.

Ahora bien, yo creo un login en el cual pide usuario y contraseña. Eso lo hice y funciona con una tabla que tiene 3 campos: "Id" "usuario" "contraseña", ahora lo que yo no se es como relacionarlo con el nivel de permiso, supongo que deberia hacer una columna mas que sea "permisos" y cada vez que creo un usuario darle el que el corresponda. Pero a su vez una vez que reconoce el nivel de permiso y el usuario tiene que ir a la pagina que le corresponda al usuario. Y eso es lo que no se porque mi idea era hacer otra tabla "Productos" y no se como relacionarla con cada usuario.

Espero que se haya entendido, cualquier duda avisen que aclaro

Gracias de antemano


EDIT: Estoy usando MySQL 4, si creen conveniente pasarme a la version 5 avisen.
  #2 (permalink)  
Antiguo 11/05/2009, 22:55
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 1 mes
Puntos: 360
Respuesta: Asociar datos de distintas tablas

Cita:
EDIT: Estoy usando MySQL 4, si creen conveniente pasarme a la version 5 avisen.
Siempre es bueno tener la ultima versión. Si está en tus manos, cambiate.

La columna permisos siempre es una buena opción, la cosa es que casi todo se maneja desde el lenguaje de programación para visualizar el sistema dependiendo de los permisos.
En este metodo, cada que vas a mostrar algo, se debe hacer una comparación con el usuario que se ha logueado.

Una muy buena opción, sería crear los usuarios a nivel de base de datos. De este modo, se permite a algunos usuarios la consulta o manipulación de ciertas tablas, mientras otras no ademas de evitar mucho código fuente en el sistema.

Un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 11/05/2009, 23:46
 
Fecha de Ingreso: mayo-2009
Mensajes: 8
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Asociar datos de distintas tablas

Hola!

Uff... que problemón no? mira, desafortunadamente soy muy técnico y un tanto purista así que soy de los que tienen la idea de hacerlo "bien" aunque sea muy complejo, pero entiendo que la cosa tiene que ser lo más sencillo posible y que funcione aunque no sea la forma "correcta" de hacerlo... dicho lo anterior, ahí te va una solución sencilla que te puede servir sin ser lo que debe de hacerse....


Tabla: Usuarios
id_usuario (autoincrementable)
usuario
contraseña
id_nivel (relaciona al usuario con el nivel)

tabla: Niveles
id_nivel (autoincrementable)
descripcion

tabla: Productos
id_producto (autoincrementable)
descripcion
precio
(...etc)

Ok, esa debe ser la base, lo que sigue depende de lo que realmente deseas hacer con la información.

La regla general es que no se deben mezclar en una misma tabla atributos de distintas entidades. Una identidad digamos que es un "algo" por sí mismo, es decir, no se supone que en la tabla de usuarios debería estar el nivel, sino en una tabla independiente que relacione al nivel con el usuario, pero bueno... la cosa es hacerlo sencillo, no?

Bien, siguiendo adelante... por lo que entendí quieres tener alguna especie de lista de los productos que compró o vendió un usuario.

Ahí hay dos caminos:
1. Una tabla que relacione al usuario con un producto y el tipo de operacion que realizó
2. Dos tablas: una para las compras y otra para las ventas.

Caso 1.
tabla: usu_prod
id_usuario
id_producto
operacion

Caso 2
tabla: compras
id_usuario
id_producto

tabla: ventas
id_usuario
id_producto

Sobra decir que el caso 1 es lo deseable.

Lo que te pongo es muy simple y le faltan muchas muchas cosas que dependen realmente de lo que quieres lograr con el sistemita, pero la cosa puede ponerse complejo muy fácil y rápidamente.

Espero te sirva.
  #4 (permalink)  
Antiguo 12/05/2009, 16:30
 
Fecha de Ingreso: agosto-2008
Mensajes: 109
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: Asociar datos de distintas tablas

Muchas gracias huesos52. En cuanto a lo que puso Grutzen (muchas gracias tambien), tengo un par de dudas ya que soy bastante nuevo en todo este tema.

1- En las tablas que me pusiste ahi, alguna de las columnas tiene que ser primary key?
2- Segun lo que entendi, dos tablas se relacionan nada mas que compartiendo el nombre de una columna?
3- Supongo que debe haber alguna herramienta o script gratis que haga lo que busco, el tema es que no se como buscarlo realmente, no se que nombre darle asi que te dejo una explicacion, ya que sos bien tecnico (de los mios jaja) bien detallada.

Primera opcion. "Si sos usuario final"

Vas a url.com/register.php y ahi solamente va aparecer un text input y un texto que dice "introduzca su nro serial".
Una vez que lo introduce, la base de datos compara si existe.
Si existe en la base de datos, se tiene que fijar si esta en uso o no.
Si esta en uso, lo redirige a una pagina donde le muestra los detalles de ese serial number, ya sea "cuando lo compro" "cuando se lo instalaron" , etc.
Si esta en la BD, pero no esta en uso lo lleva a otra pantalla donde le muestra un formulario para llenar ese registro "cuando se lo instalaron" "cuando lo compro" etc.
Obviamente si el serial no esta en la BD, lo lleva a una pantalla que le dice que no existe.

Segundo opcion. "Si sos vendedor"

Vas a url.com/login.php e introducis un login y un password. Y te redirige a otra pagina.
En esa pagina vas a tener 4 botones y 1 text input.

Boton 1- "Ver todos mis serial numbers" Basicamente, si clickea ahi vera todos los SN asignados a su login.
Boton 2- "Ver reportes de clientes" Le apareceran, los datos que entro el cliente con respecto a su particular SN.
Boton 3- "Exportar todos mis SN a cvs"
Boton 4- "Exportar todos los reportes a cvs"
Text input - "Introduzca SN". Lo mismo que en clientes.
Si esta en la BD, chequea que tenga el reporte hecho y lo muestra, sino muestra el formulario de reporte.

Tercera opcion. "Admin"

Me logeo y puedo editar todo

Espero que se haya entendido, quiza lo mejor sea si me podes recomendar algo ya hecho que se pueda editar lo minimo, pero si hay que hacerlo de 0, con la mano que me estas dando lo voy a sacar adelante.

Gracias a todos
  #5 (permalink)  
Antiguo 12/05/2009, 17:44
Avatar de Anubis_Slash  
Fecha de Ingreso: mayo-2009
Ubicación: aqui y haya
Mensajes: 173
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: Asociar datos de distintas tablas

Bueno soy nuevo en esto asi que espero que te sea de alguna ayuda esto, soy un poco tecnico tambien, pero aqui esta lo que yo haria:

Para el primer caso:
-Primero que nada haces una consulta para verificar si existe ese producto y esta en uso, seria algo asi: "SELECT id_producto FROM Productos WHERE id_producto = 'textodenumerodeproducto' AND estaenuso = '1'"
Si esa consulta te regresa vacia quiere decir que o no existe el producto o no esta en uso. Si quieres saber nada mas si existe ese producto nada mas quita lo que dice a partir del AND.

Para el segundo caso:
-Haces una consulta para comprobar si existe ese usuario: "SELECT * FROM Usuarios WHERE usuario = 'variableusuario' AND contraseña = 'variablecontraseña'"
-para el caso del boton1 me imagino que en la tabla de productos tendras un campo que se llame usuarioid o vendedorid el cual este relacionado con la tabla de usuarios, en este caso puedes hacer la siguiente consulta para sacar todos los productos relacionados con ese usuario: "SELECT * FROM Productos p INNER JOIN Usuarios u WHERE p.usuarioid = u.id_usuario" NOTA: el inner join nos sirve para unir tablas.
-boton 2 como no tengo ni idea de como vas a decirle que numero de producto seria se me ocurre algo como lo siguiente: "SELECT * FROM Productos WHERE id_Producto = 'variableproducto'", esto deberia de traerte toda la informacion de ese producto en especifico a partir del id del producto.
En los otros dos botones lamento no ser de mucha ayuda pero no se me ocurre nada

Espero que esto te pueda orientar un poco
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 09:03.