Je tables MYSQL comme suitcomplexe requête de jointure
user TABLE {id INT}
profile TABLE {user_id INT, facebook_id varchar(50)}
messages TABLE {id INT, message TEXT, from_id INT, type enum('main','facebook'}
messages_to TABLE {user_id varchar(50), message_id INT}
profile.user_id REFERS To user.id
- the messages_to.message_id refers to the messages.ID column.
- the messages_to.user_id refers to profile.user_id IF messages.type = 'main' BUT
if message_type = 'facebook' THEN messages_to.user_id REFERS to profile.facebook_id
Je veux faire une requête de jointure qui sélectionne essentiellement tous les messages à une personne, mais la chose est le messages_to.user_id peut se référer soit the person's facebook ID or the person's ID (a reference to user.id column).
donc, fondamentalement, la requête doit fonctionner comme suit
- il faut sélectionner tous les messages dans le tableau des messages, et si
messages.type = 'facebook'
vérifie si messages_to.user_id e quals FACEBOOK ID de la personne. (Noter que les magasins de table de messages_to les destinataires pour chaque message ID) - mais si les
messages.type = 'main'
vérifie si lemessages_to.user_id
est égal à laperson's USER ID (USER.id)
Est-il possible de faire un mysql join query
pour cela efficacement?
La table messages_tos stocke TOUS les destinataires pour chaque message dans la table MESSAGES. IL PEUT Y AVOIR PLUS D'UN DESTINATAIRE pour un message.
Êtes-vous sûr de vouloir utiliser une table séparée pour stocker facebook_id? Que diriez-vous d'avoir dans la table utilisateur un champ facebook_id, qui peut être soit nul ou a une valeur. Chaque fois que quelqu'un crée un compte via facebook, vous créez un utilisateur à la volée avec un nom d'utilisateur aléatoire (ou utilisez l'adresse e-mail de facebook) et un mot de passe aléatoire. Ensuite, vous pouvez toujours utiliser user_id et si vous avez un utilisateur facebook, vous vérifiez d'abord l'ID utilisateur correspondant – mkk