tengo las tablas de MySQL de la siguiente maneracompleja consulta de combinación
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
Quiero hacer una consulta que, básicamente, se seleccionan todos los mensajes a una persona específica se unen, pero la cosa es la messages_to.user_id puede hacer referencia a the person's facebook ID or the person's ID (a reference to user.id column).
Así que, básicamente, la consulta debería funcionar de la siguiente manera
- se debe seleccionar todos los mensajes en la tabla de mensajes, y si
messages.type = 'facebook'
comprueba si messages_to.user_id correo quals la identificación de FACEBOOK de la persona. (Tenga en cuenta que las tiendas de mesa messages_to los destinatarios para cada mensaje ID) - pero si el
messages.type = 'main'
comprueba si elmessages_to.user_id
es igual a laperson's USER ID (USER.id)
¿Es posible hacer un mysql join query
para que de manera eficiente?
La tabla messages_tos almacena TODOS los destinatarios de cada mensaje en la tabla MENSAJES. PUEDE HABER MÁS DE UN RECEPTOR por un mensaje.
¿Estás seguro de que necesitas una mesa para almacenar facebook_id? ¿Qué tal tener en la tabla de Usuario un campo facebook_id, que puede ser nulo o tiene un valor? Cada vez que alguien crea una cuenta a través de Facebook, crea User on fly con un nombre de usuario aleatorio (o usa el correo electrónico de Facebook) y una contraseña aleatoria. Entonces siempre puede usar user_id y si tiene un usuario de Facebook, primero verifica el user_id correspondiente – mkk