Regresar a la página www.ComoCrearTuWeb.com
Resultados 1 al 11 de 11

Tema: ¿como relacionar 2 tablas de 1 bbdd?

  1. #1
    Esto empieza a ser un vicio... Habitante Avatar de gjulian
    Fecha de Ingreso
    29 ene, 09
    Ubicación
    Sevilla
    Mensajes
    558
    Poder de Reputación
    15

    ¿como relacionar 2 tablas de 1 bbdd?

    Hola, vereis tengo un sistema de registro y sesiones en una tabla de una bbdd y parece que funciona bien. Pero ahora quisiera que los usuarios pudieran subir archivos solo de img a la bbdd.
    Como es logico el usuario debe iniciar session para poder subir img. Mi pregunta es ¿debo crear otra tabla solo para las imgs? o ¿con añadir los campos necesarios se suben las img al id del usuario?
    Lo mejor de caerse al tropezar, es volverse a levantar.

  2. #2
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    02 may, 11
    Ubicación
    Santiago, Chile
    Mensajes
    2,047
    Poder de Reputación
    21
    Hola:

    No te aconsejo que subas las imágenes directamente a la base de datos, pues es muy costoso para el servidor (subir una imagen no es nada, pero ten en cuenta que pueden haber varios usuarios conectados haciendo lo mismo). En su lugar deberías asociar las imágenes en base al ID del usuario (pues el ID no lo podrá modificar).

    Por ejemplo: un usuario con ID 1 sube una imagen. Lo que deberías hacer es crear una carpeta llamada 1 y dentro de esta carpeta guardar la imagen. Luego puedes guardar la URL en la base de datos.

    Como sea que decidas hacerlo, sí necesitas una tabla dedicada para las imágenes, pues ¿cómo lo harás si un mismo usuario sube 10 fotos? Tendrías que duplicar el registro del usuario 10 veces, lo que significa que tu base de datos esta mal diseñada.

    En lugar de duplicar los datos creas una tabla y cada registro lo asocias al ID del usuario. Ejemplo de tabla:

    Código:
    CREATE TABLE user_images (
      image_id MEDIUMINT(8) UNSIGNED PRIMARY KEY AUTO_INCREMENT,
      image_name VARCHAR(300) NOT NULL,
      image_url TEXT NOT NULL,
      user_id MEDIUMINT(8) UNSIGNED NOT NULL, // El tamaño y el tipo deberían ser el mismo que se utilizó en la tabla donde está la información de usuarios.
      INDEX (user_id)
    );
    Saludos.

    P.D.: si tu servidor utiliza Linux (y debería tener) como sistema operativo, entonces tendrás que asignarle permisos 0777 a la carpeta donde se suban las imágenes.

  3. #3
    Esto empieza a ser un vicio... Habitante Avatar de gjulian
    Fecha de Ingreso
    29 ene, 09
    Ubicación
    Sevilla
    Mensajes
    558
    Poder de Reputación
    15
    No se si te entiendo skaparate. Mira, hasta ahora tengo en una bbdd llamada (usuarios) con los campos de registro tipicos (id, nombre, e-mail, contraseña).
    Ahora he creado un sistema de session para que el usuario pueda acceder a unas paginas privadas donde pueda subir imagenes.
    Por otro lado tengo otra bbdd llamada (subir_imagenes) con los campos (imagen_id, nombre, url). Las imagenes se guardan en un archivo.
    Mi intencion es que todo aquel que esté registrado e inicie session pueda subir imagenes a ese archivo o si lo prefiere pueda ver las imagenes que cualquiera haya subido a ese archivo.
    Tu me planteas otra cuestion (creo entender) y es ¿que pasaría si un usuario sube mas de 1 imagen?
    Me respondo: se crearía otro registro de subida de imagen con su imagen_id, nombre y url. De esa manera un usuario podría tener tantos registros como img subidas ¿no?
    O ¿hay un sistema mejor?
    O ¿con añadir los campos de la bbdd (subir_imagenes) a la de (usuarios) tendría bastante?
    Última edición por gjulian; 14/06/2012 a las 10:05
    Lo mejor de caerse al tropezar, es volverse a levantar.

  4. #4
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    02 may, 11
    Ubicación
    Santiago, Chile
    Mensajes
    2,047
    Poder de Reputación
    21
    No no no, está bien, es solo que como preguntas ¿debo crear otra tabla solo para las imgs? supuse que no tenías otra tabla.

    ¿con añadir los campos de la bbdd (subir_imagenes) a la de (usuarios) tendría bastante?
    No debes añadir todos los campos, sólo el ID del usuario. En SQL, los ID se utilizan para relacionar las tablas entre sí.

  5. #5
    Esto empieza a ser un vicio... Habitante Avatar de gjulian
    Fecha de Ingreso
    29 ene, 09
    Ubicación
    Sevilla
    Mensajes
    558
    Poder de Reputación
    15
    Eso es precisamente lo que no se hacer, relacionar el id de un usuario de una tabla con la imagen_id de la otra tabla.
    Entonces lo que he hecho es añadir al tabla de img un campo "nick" que tomo del registro o session.
    ¿como lo ves?
    Lo mejor de caerse al tropezar, es volverse a levantar.

  6. #6
    Me va gustando esto... Habitante Avatar de SurKaiser
    Fecha de Ingreso
    15 oct, 11
    Mensajes
    256
    Poder de Reputación
    10
    Es demasiado simple,

    mira en la tabla usuarios tienes user_id o algo similar , ahora en la tabla de imagenes crea un campo que se llame igual user_id aparte del id principal , ese user_id no lo pongas en auto increment y ponle INT 11,

    despues cuando un usuario inserte una imagen, obtienes datos de el atravez de cookie o session lo que uses, si obtienes su nombre haces una simple consulta con un WHERE, asi

    si el usuario que inserta imagen se llama "surkaiser" harias algo asi para obtener el id de ese usuario

    $obtener = mysql_query("SELECT * FROM usuario WHERE usuario='".$usuario."'");

    Ahi la variable usuario contendra el nombre de usuario, igual hay que añadirle comprobaciones y demas

    Bien como hemos obtenido la fila donde se encuentra ese usuario obtenemos los datos de esa fila asi:

    $usuarios = mysql_fetch_assoc($obtener);

    Bien ahora como ya obtuvimos cual id es y para aclararlo lo ponemos en una variable:

    $usuario_actual = $usuarios["user_id"];

    Y listo tenemos casi todo relacionado solo farta insertar los datos de la imagen, entonces hacemos el insert

    $insertar = mysql_query("INSERT INTO imagenes(tuscampos,user_id) VALUES()");

    Y listo tendriamos todo relacionado ahora para obtener las imagenes que subio un usuario ya es mas facil

    haces el primer paso obtener el id del usuario y con eso otro select para la imagen asi:

    $obtener = mysql_query("SELECT * FROM imagenes WHERE user_id='".$usuario_actual."'");


    Saludos!!
    Mi web en construccion :
    surkaiser . com . es
    "El conocimiento es Poder"

  7. #7
    Esto empieza a ser un vicio... Habitante Avatar de gjulian
    Fecha de Ingreso
    29 ene, 09
    Ubicación
    Sevilla
    Mensajes
    558
    Poder de Reputación
    15
    Gracias SurKaiser me diste la idea y me quedo asi. Añadí un campo nick que lo toma de $_SESSION a la tabla imagenes y listo.
    Asi tengo por un lado una tabla de usuarios para registros y login, y por otra la tabla de subidas de img con el nick del user.
    Y queda way
    Si el user quiere ver sus img tengo el Select img from mitabla where nick='$_SESSION'
    Última edición por gjulian; 15/06/2012 a las 15:23
    Lo mejor de caerse al tropezar, es volverse a levantar.

  8. #8
    Me va gustando esto... Habitante Avatar de SurKaiser
    Fecha de Ingreso
    15 oct, 11
    Mensajes
    256
    Poder de Reputación
    10
    Mas que la idea te di la resolucion del problema,

    Que bien que ya se haya solucionado y entendido...


    Saludos y sigue asi y aprenderas mucho mas xD
    Mi web en construccion :
    surkaiser . com . es
    "El conocimiento es Poder"

  9. #9
    Esto empieza a ser un vicio... Habitante Avatar de gjulian
    Fecha de Ingreso
    29 ene, 09
    Ubicación
    Sevilla
    Mensajes
    558
    Poder de Reputación
    15
    Po si, gracias.
    Ahora voy a crear otro tema en Mysql, porque por mas que googleo no me entero de como limitar el tamaño d ela img subidas.
    Lo mejor de caerse al tropezar, es volverse a levantar.

  10. #10
    Recien Llegado! Pasaba por aquí...
    Fecha de Ingreso
    22 sep, 12
    Mensajes
    2
    Poder de Reputación
    0
    Buenas noches, soy nueva aqui solo quiero que me aclaren algo, estoy diseñando una base de datos para un sisitema de facturacion e inventario, pero tengo un dilema con respecto a la factura, se supone que en mi sistema se debe gemerar el numero de factura. Alguien pe podria explicar como lo hago es una funcion de php o es que tengo que construir una tabla u llenarla con el codigo ? se los agradeceria enormemente.

  11. #11
    Esto empieza a ser un vicio... Habitante Avatar de gjulian
    Fecha de Ingreso
    29 ene, 09
    Ubicación
    Sevilla
    Mensajes
    558
    Poder de Reputación
    15
    A ver, me imagino que tendras una pagina a la que al introdudirles los datos del cliente te hará una seleccion de tu bbdd para poder imprimirlos ¿no?
    Bien pues un esa pagina que se va a imprimir, en el campo nº factura ponle algo asi:
    Código PHP:
     $num_factura = ($row['numero_factura']) +1
    De esa manera se ira incrementando en 1 cada impresion de factura que hagas.
    Lo mejor de caerse al tropezar, es volverse a levantar.

Temas Similares

  1. Respuestas: 7
    Último Mensaje: 31/03/2010, 20:22
  2. ¿Cómo relacionar diferentes plantillas?
    Por Kane en el foro Foro General
    Respuestas: 6
    Último Mensaje: 27/03/2009, 15:43
  3. Respuestas: 2
    Último Mensaje: 20/06/2008, 13:31

Permisos de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •