私は次のようにMYSQLテーブルを持っています
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
基本的に特定の人へのすべてのメッセージを選択する結合クエリを実行したいのですが、messages_to.user_idはどちらかを参照できますthe person's facebook ID or the person's ID (a reference to user.id column).
したがって、基本的にクエリは次のように機能するはずです
- メッセージテーブル内のすべてのメッセージを選択し、
messages.type = 'facebook'messages_to.user_idがその人のFACEBOOKIDと等しいかどうかをチェックする必要があります。(messages_toテーブルには、各メッセージIDの受信者が格納されていることに注意してください) - しかし、等しいかどうかを
messages.type = 'main'チェックする場合messages_to.user_idperson's USER ID (USER.id)
mysql join queryそのために効率的に行うことは可能ですか?
messages_tosテーブルは、MESSAGESテーブルの各メッセージのすべての受信者を格納します。メッセージの受信者は複数存在する可能性があります。