Tôi có bảng MYSQL như sauphức tạp tham gia truy vấ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
tôi muốn làm một tham gia truy vấn mà về cơ bản sẽ chọn tất cả các tin nhắn đến một người cụ thể, nhưng vấn đề là các messages_to.user_id có thể tham khảo một trong hai the person's facebook ID or the person's ID (a reference to user.id column).
vì vậy, về cơ bản các truy vấn nên làm việc như sau
- nó nên chọn tất cả các tin nhắn trong thông điệp bảng, và nếu
messages.type = 'facebook'
kiểm tra nếu messages_to.user_id e quals ID FACEBOOK của người đó. (Lưu ý rằng các cửa hàng bảng messages_to người nhận cho mỗi thông điệp ID) - NHƯNG nếu
messages.type = 'main'
kiểm tra nếumessages_to.user_id
bằng vớiperson's USER ID (USER.id)
Có thể làm một mysql join query
cho rằng hiệu quả?
tin nhắn_tổng cửa hàng bảng TẤT CẢ người nhận cho từng thư trong bảng MESSAGES. CÓ THỂ THÊM MỘT NGƯỜI TUYỂN DỤNG cho một tin nhắn.
bạn có chắc là bạn cần bảng riêng để lưu trữ facebook_id không? Làm thế nào về có trong bảng người dùng một lĩnh vực facebook_id, có thể là null hoặc có một giá trị. Bất cứ khi nào ai đó tạo tài khoản qua facebook, bạn tạo User on fly với một số tên người dùng ngẫu nhiên (hoặc sử dụng e-mail của facebook) và mật khẩu ngẫu nhiên. Sau đó, bạn luôn có thể sử dụng user_id và nếu bạn có người dùng facebook, trước tiên bạn kiểm tra user_id tương ứng – mkk