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

dos identificadores en una tabla

Estas en el tema de dos identificadores en una tabla en el foro de Mysql en Foros del Web. Puedo crear dos campos en una misma tabla que sean primary autoincremente? ejemplo TABLA1 ------------------------------------------------------- ID_1|ID_2|MULTIPLES_ARCHIVOS_NOMBRES| --------------------------------------------------------- 1|1|avion.jpg ----------------------------------------------------------- 2|1|coche.jpg ---------------------------------------------------------- 3|1|portatil.jpg ---------------------------------------------------------- como tendria ...
  #1 (permalink)  
Antiguo 12/05/2011, 07:43
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
dos identificadores en una tabla

Puedo crear dos campos en una misma tabla que sean primary autoincremente?

ejemplo

TABLA1
-------------------------------------------------------
ID_1|ID_2|MULTIPLES_ARCHIVOS_NOMBRES|
---------------------------------------------------------
1|1|avion.jpg
-----------------------------------------------------------
2|1|coche.jpg
----------------------------------------------------------
3|1|portatil.jpg
----------------------------------------------------------

como tendria que rellenar los campos para que me deje hacer esto yo puse los id_1 y id_2 primary autoincrement, no me dejo phpmyadmin
  #2 (permalink)  
Antiguo 12/05/2011, 08:25
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: dos identificadores en una tabla

¿Para que quieres dos ID autoincrementables? Además, en el ejemplo que pusiste hay uno que se incrementa y el otro vale siempre 1.
  #3 (permalink)  
Antiguo 12/05/2011, 08:36
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: dos identificadores en una tabla

Hola Heimish2000 el segundo identificador no vale solo uno lo que pasa que no lo puse representa que el formulario que envia multiples archivos cada vez que procesa envia tres archivos de golpe la tabla segiria asin solo el id_2

ID_2|¡MULTIPLES_ARCHIVOS_NOMBRE
------------------------------------------------
2|radio.jpg
---------------------------------
2|tele.jpg
-----------------------------------
2|hoja.jpg
------------------------------------
3|boli.jpg
-----------------------------------
3|otroarchivo.jpg
------------------------------------
3|otro.jpg
--------------------------------------

osea que como lo puedo hacer alguna idea
  #4 (permalink)  
Antiguo 12/05/2011, 08:52
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 2 meses
Puntos: 89
Respuesta: dos identificadores en una tabla

¿Siempre procesa tres archivos? Sigo sin saber para que quieres dos ID en la misma tabla, en todo caso sería un ID autoincrementable y PK y un número no autoincrementable que deberás controlar tú que sea el número de formulario desde el que se procesa
  #5 (permalink)  
Antiguo 12/05/2011, 08:59
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: dos identificadores en una tabla

No puede ser que procese uno dos o tres los que se manden-

Haber lo quiero para tener una relacion con otra tabla que hay un campo titulo osea que cuando clickees al titulo salga las fotos de ese titulo entendistes ahora?
  #6 (permalink)  
Antiguo 12/05/2011, 09: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, 4 meses
Puntos: 2658
Respuesta: dos identificadores en una tabla

Eso es una relación N:N entre Títulos y Fotos. Requiere tres tablas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 12/05/2011, 09:23
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: dos identificadores en una tabla

puedes explicarme porque tres tablas?
  #8 (permalink)  
Antiguo 12/05/2011, 09:35
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, 4 meses
Puntos: 2658
Respuesta: dos identificadores en una tabla

Bueno, eso sería sólo si las fotos pudieran corresponder a más de un título. Perdón, lo leí a las apuradas.
Como aclaración, el modelo relacional determina que toda relación N:N entre dos entidades genera una tabla relacional que contiene las PK de ambas tablas .
En tu caso, si no se da esa situación, no es necesario y se podría resolver con una FK de la tabla Títulos en la tabla Fotos (pero si hay al menos una foto que pueda relacionarse con más de un título, tienes que pasar a tres tablas).

Ahora bien, en el caso que tu mencionas, no necesitas un segundo ID incremental por grupos o no en esa tabla. Lo que necesitas es numerar los subitems de fotos relacionados con un título determinado, y dejar que las fotos tengan su propio PK y la FK del título.
Código MySQL:
Ver original
  1. SELECT T.titulo_id, (@id:=@id+1) nroFoto, T.titulo, F.nombre_archivo
  2.     titulos T INNER JOIN fotos F ON T.titulo_id = F.titulo_id
  3.     JOIN (SELECT @id:=0) I
  4.     T.titulo_id = valorbuscado;

Si quieres listar todas, pero numerandolas por grupo, la consulta es algo más complicada, pero se puede hacer.
Incluso ni siquiera necesitas hacer esto, porque puedes numerar una columna en la tabla cuando presentas los datos en la pantalla, en tu aplicación...
Lo importante es que tengas en cuenta que no se deben poner columnas innecesarias en las tablas. Sólo van si son atributos propios del objeto que la tabla representa, y si son calculables, no van.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 12/05/2011, 09:46
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: dos identificadores en una tabla

perdoname gnzsoloyo pero no te entendi
  #10 (permalink)  
Antiguo 12/05/2011, 10:03
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, 4 meses
Puntos: 2658
Respuesta: dos identificadores en una tabla

Vamos desde el principio:
- Tienes dos tablas. Una de ellas guarda los Títulos; la otra guarda las Fotos. Cada una de ellas tiene su propia PK.
- Si cada foto sólo puede relacionarse con un título, la PK del título va como FK en Foto. De ese modo cuando consultas por un título obtienes las fotos que se vinculan.
- Si tu problema es que quieres numerar desde 1 en adelante para mostrar las fotos, no es necesario poner ese valor en la tabla Fotos, se puede obtener el mismo resultado sin tocar la tabla, haciendo la consulta con variables de usuario de MySQL:
Código MySQL:
Ver original
  1. SELECT T.titulo_id, (@id:=@id+1) nroFoto, T.titulo, F.nombre_archivo
  2.     titulos T INNER JOIN fotos F ON T.titulo_id = F.titulo_id
  3.     JOIN (SELECT @id:=0) I
  4.     T.titulo_id = valorbuscado;
Esa "@id" es una variable de usuario de MySQL, que existe y permanece durante la conexión, y del modo que te la pongo generaría una numeración consecutiva.
- El detalle es que esto mismo lo puedes hacer en pantalla, sin necesidad de ninguna cosa (ni campo adicional, ni variable), simplemente poniendo la numeración a medida que creas la tabla en pantalla.

Finalmente:
- Si y sólo si al menos una foto de todas las guardadas se puede relacionar con más de un título almacenado, entonces el modelo de dos tablas no sirve. Habría que usar uno de tres, porque la tercer tabla se usa para relacionar a cada título con cada foto, y de ese modo puedes tomar sólo las fotos vinculadas con un título dado, o tomar todos los títulos vinculados con una misma foto.
Eso es parte del modelo de bases de datos relacionales.

¿Hay algo que no se entienda de esto?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 12/05/2011, 10:28
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: dos identificadores en una tabla

perdoname gnzsoloyo pero sigo sin entenderlo bien espero que tengas paciencia

tengo dos tablas TABLA1 TABLA2

con un campo titulo TABLA1
otro campo fotos TABLA2

Yo solo quiero mostrar con un enlace en campo titulo hacia las fotos teniendo en cuenta que son multiples archivos y se van autoincremnetando en las dos tablas tengo el id_contador que es el que se autoincrementa bien yo tengo algo asin:


por un lado :
Código PHP:
Ver original
  1. $conexion=mysql_connect("localhost","root","");
  2.    mysql_select_db("basedatos",$conexion);
  3.    $sql = mysql_query("SELECT * FROM tabla1");
  4.    while($row=mysql_fetch_assoc($sql)){
  5.    echo "<a href='pagina.php?id=".$row['id_contador']."'><br>".$row['titulo']."</a>";
  6.    }
  7.    mysql_close($conexion);

y por otro esto:

Última edición por pithon; 12/05/2011 a las 10:42
  #12 (permalink)  
Antiguo 12/05/2011, 10:51
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: dos identificadores en una tabla

Código PHP:
Ver original
  1. $sql = mysql_query( SELECT NOMBRE_IMG FROM tabla1, tabla2 WHERE tabla1.ID_CONTADOR=tabla2.ID_CONTADOR AND tabla1.ID_CONTADOR=1");
  2. $row=mysql_fetch_assoc($sql));
  3.  
  4.      
  5. echo $row['fotos']."<br/>";
perdona en el codigo de arriba me deje asociar tabla1 con tabla2

bien entonces como lo arreglo sin cambiar los campos de las tablas?
  #13 (permalink)  
Antiguo 12/05/2011, 10:56
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, 4 meses
Puntos: 2658
Respuesta: dos identificadores en una tabla

Código MySQL:
Ver original
  1.    NOMBRE_IMG
  2.    tabla1 T1 INNER JOIN tabla2 T2 T1.ID_CONTADOR = T2.ID_CONTADOR
  3.     tabla1.ID_CONTADOR=1
Para que esto te relacione los títulos en Tabla1 con las fotos en Tabla2, el ID_contador de ambos debe tener el mismo valor, lo que significaría que Tabla2.id_contador es la clave foránea que apunta a la clave primaria de Tabla1.
En ese caso Tabla1.id_contador es autoincremental, pero Tabla2.id_contador no lo es. ¿Está definido de esa forma?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 12/05/2011, 11:02
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: dos identificadores en una tabla

la tabla2 no entonces para definirla como clave foránea como seria las tablas las hago con phpmyadmin
  #15 (permalink)  
Antiguo 12/05/2011, 11:11
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, 4 meses
Puntos: 2658
Respuesta: dos identificadores en una tabla

Primero fíjate si el tipo de tablas es MyISAM o InnoDB, ya que con las MyISAM no se pueden crear las FK y habría que manejar el problema por programación.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #16 (permalink)  
Antiguo 12/05/2011, 11:13
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, 4 meses
Puntos: 2658
Respuesta: dos identificadores en una tabla

Respecto a cómo se trabajan las FK en phpMyAdmin, acá tienes un buen blog dedicado a ese tema: http://www.bibigeek.com/2009/08/31/p...l-foreign-key/
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #17 (permalink)  
Antiguo 12/05/2011, 11:15
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: dos identificadores en una tabla

Vale mas o menos seria algo asin:

Código PHP:
Ver original
  1. $conexion=mysql_connect("localhost","root","");
  2.   mysql_select_db("basedatos",$conexion);
  3.   $sql = mysql_query("SELECT nombre_img* FROM tabla1 INNER JOIN tabla1.id_contador=tabla2.id_contador WHERE tabla1.id_contador=1");
  4.   while($row=mysql_fetch_assoc($sql)){
  5.    echo "<a href='pagina.php?id=".$row['id_contador']."'><br>".$row['titulo']."</a>";
  6.    }

en la tabla1 id_contador seria primary autoincrement.

y en la tabla2 el id_contador como lo tendria que definir con unique autoincrement

es asin o en que fallo?

y la tabla2 el id_contador como lo defino?
  #18 (permalink)  
Antiguo 12/05/2011, 11:20
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: dos identificadores en una tabla

las tengo con MyISAM pero las puedo cambiar a InnoDB o cual seria el problema si las cambio?

para programarlo seria muy complicado la verdad que lo prefiero la cuestion es aprender tienes algun tutorial ?
  #19 (permalink)  
Antiguo 12/05/2011, 11:31
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, 4 meses
Puntos: 2658
Respuesta: dos identificadores en una tabla

Cita:
las tengo con MyISAM pero las puedo cambiar a InnoDB o cual seria el problema si las cambio?
En general no hay diferencias mayores, al menos en los aspectos genéricos, y consultas simples. Sí hay algunas limitaciones:
- No existen los índices FULLTEXT, por lo cual no se peuden hacer consultas del tipo MATCH() ... AGAINST().
- La presencia de FK exige que la secuencialidad de las inserciones en tablas dependientes por FK sea siempre precisa, lo que implica una programación más fina de los INSERT.
- Algunas consultas pueden volverse algo complejas.
- otros (ver manual de referencia).

Por su lado, tienen ciertas ventajas:
- Puedes usar transacciones, de modo que puedes preparar diversas operaciones de INSERT/UPDATE/DELETE y que sólo al terminar se confirmen. Eso aumenta la seguridad en integridad de datos.
- No tendrás datos inconsistentes, etc.

El tema es demasiado largo como para un post.
Cita:
cuestion es aprender tienes algun tutorial ?
Para eso están los links de acceso a Maestros del Web, al pié de esta página. Allí encontrarás tutoriales y manuales de todo tipo y tema.
Úsalos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #20 (permalink)  
Antiguo 12/05/2011, 11:38
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: dos identificadores en una tabla

pues muchas gracias gnzsoloyo solo una ultima cosita cuando cree las tablas con innoDB

el codigo que postee arriba sera correcto para que funcione.

y este codigo para mostrar una vez clickeas:
Código PHP:
Ver original
  1. $sql = mysql_query("SELECT * FROM tabla2  WHERE id_contador='".$_GET['id']."' ");
  2.     $row=mysql_fetch_assoc($sql);
  3.    echo $row['nombre_img']."<br/>";

seria correcto teniendo las tablas bien echas?
  #21 (permalink)  
Antiguo 12/05/2011, 11:59
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, 4 meses
Puntos: 2658
Respuesta: dos identificadores en una tabla

Las consultas simples o JOINS entre tablas siguen funcionando igual. En ese punto no tendrás diferencias visibles. Sólo de performance.
Donde hay más detalles a afinar es siempre lo que tiene que ver con INSERT; UPDATE o DELETE, porque las restricciones de FK exigen que los valores de referencia se respeten. Allí te encontrarás en algún momento con mensajes de error que antes no existían, porque el modelo te obliga a respetar la integridad referencial.
Lo que trae de ventaja es que al respetar la integridad será menos usual que tengas respuestas equivocadas en las SELECT.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #22 (permalink)  
Antiguo 12/05/2011, 12:34
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: dos identificadores en una tabla

vale muchas gracias maestro por la informacion ya cuando tenga los poblemas del insert,update o detete ya intentare buscar la solucion por aca aunque una cosita por ejemplo para hacer un insert antes lo hacia asin:

Código PHP:
Ver original
  1. $ssql2="INSERT INTO tabla(titulo,texto,subtexto,nombre_imagen)values('".$_POST['titulo']."','".$_POST['texto']."','".$subtexto."','".$_FILES['archivo']['name']."',)";
en que cambiaria si los campos se llaman igual?
  #23 (permalink)  
Antiguo 12/05/2011, 12:46
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, 4 meses
Puntos: 2658
Respuesta: dos identificadores en una tabla

Cita:
en que cambiaria si los campos se llaman igual?
Que antes podías hacer el insert sin problemas en cualquiera de las tablas.
Ahora lo primero es dar de alta los títulos, luego recuperar el ID generado (PHP tiene para eso la función mysql_insert_id()), y luego usar ese valor para hacer el segundo INSERT.
En esencia: Una FK no puede ser NULL, ni tampoco tener un valor que no aparezca en la tabla de referencia. Eso significa que si le quieres meter un 12654, y ese valor no existe previamente en la tabla Títulos, no podrás hacerlo, MySQL no lo aceptará.
¿Se comprende?
Este tipo de cosas las puedes buscar en las FAQs del foro de PHP, por ejemplo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #24 (permalink)  
Antiguo 12/05/2011, 12:57
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: dos identificadores en una tabla

Eso esta muy bien que solo se pueda meter un valor si esta en las dos tablas

bueno ultima cosita no me podrias hacer un ejemplo de como tendria que ser la linea para un insert?
  #25 (permalink)  
Antiguo 12/05/2011, 18:17
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: dos identificadores en una tabla

cree dos tablas llamada CADENAS y IMAGENES

la tabla CADENAS tiene los campos ID_ANUNCIOS, TITULO TEXTO SUBTEXTO.
la tabla ARCHIVOS tiene los campos ID_IMAGENES,IMAGENES
las cree con un enlace desde ID_ANUNCIOS hasta ID_IMAGENES

ahora si que podre relacionarlas?
como tendria que hacer el insert ?
me podrias dar una explicacion saludos

Etiquetas: tabla, identificador
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 03:42.