¿Qué tipo de unión necesito?

Para una página de registro donde el usuario ingresa su información de contacto y su nombre de usuario y contraseña. Tengo dos tablas, una para un nombre de usuario y contraseña con una clave extranjera llamada contactinfo y una tabla de información de contacto que quiero unir con la tabla de usuarios. ¿Deben configurarse también la clave externa y la clave principal para que aumenten automáticamente?

Muchas Gracias

preguntado el 10 de marzo de 12 a las 11:03

2 Respuestas

Configure ambas claves primarias para que se incrementen automáticamente. Agregue una clave externa de la tabla de usuarios a la tabla de información de contacto y listo. Las claves externas son nunca incremento automático, después de todo, están destinados a remitir a un valor en otra tabla.

Tenga en cuenta que si está utilizando un ORM como Doctrine, las relaciones entre user y contactinformation será manejado automáticamente por usted. De lo contrario, primero debe insertar su información de contacto, obtener su clave primaria generada (a través de mysql_insert_id por ejemplo), luego realice su inserción en el user mesa.

respondido 10 mar '12, 12:03

Hola, gracias por la respuesta, esto es exactamente lo que ya tengo. Sin embargo, mi confusión proviene de cuando agrego los datos a la base de datos. Insertaría en la tabla de usuarios el nombre de usuario y la contraseña, pero luego, ¿cómo vinculo la fila para agregar el nombre, dirección de correo electrónico, etc.? Galleta128

cuando dices que necesito obtener la clave generada, ¿hay alguna manera de asegurar siempre que obtengo la clave correcta? - Galleta128

Necesitas llamar mysql_insert_id justo después de mysql_query, para asegurarse de obtener la clave correcta. - Percepción

la tabla del usuario debe tener:

  • userid (primario, autoincremento)
  • nombre de usuario
  • la contraseña

la otra mesa tiene:

  • infoid (primario, autoincremento)
  • userid (esto vinculará esta fila a la otra tabla)
  • y tus datos ...

deberías usar una "combinación izquierda"

La palabra clave LEFT JOIN devuelve todas las filas de la tabla de la izquierda (table_name1), incluso si no hay coincidencias en la tabla de la derecha (table_name2). (w3schools)

así que tenemos una tabla de usuarios como nuestra "tabla izquierda" e información como "tabla derecha". Es posible que el usuario aún no haya configurado la información, pero tiene una cuenta. así que tenemos una cuenta ("izquierda") pero no necesariamente información ("derecha") - LEFT JOIN suena como la combinación para el trabajo

y su sql debería verse aproximadamente como

SELECT "columns" FROM table1
LEFT JOIN table2 ON table1.userid = table2.userid

//where "columns" are the columns you want to get
//from the tables in "table.column" notation like: user.username or info.mobile

respondido 10 mar '12, 11:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.