2014-05-06 16 views
17

Tôi có 3 bảng mysql.bản ghi hoạt động của người viết mã bên trái tham gia

Table 1 user 
id | name 

Table 2 emails 
id | email 

Table 3 user_email 
user_id | email_id 

Tôi không có kinh nghiệm trong nhiều bảng truy vấn.
Sử dụng bản ghi hoạt động của người ký mã, tôi muốn tìm địa chỉ email của người dùng dựa trên id người dùng, vui lòng cho biết liệu mã bên dưới có chính xác không?

$CI->db->select('email'); 
$CI->db->from('emails'); 
$CI->db->where('id', $userid); 
$CI->db->join('user_email', 'user_email.user_id = emails.id', 'left'); 
$query = $CI->db->get(); 

Trả lời

28

Bạn có sai mệnh đề where bạn cần phải so sánh user_id từ bảng của bạn, bạn đang so sánh id của email đến cung cấp $user_id

$CI->db->select('email'); 
$CI->db->from('emails'); 
$CI->db->where('user_id', $userid); 
$CI->db->join('user_email', 'user_email.user_id = emails.id', 'left'); 
$query = $CI->db->get(); 

Một cách hữu ích hơn là để cho bí danh cho các bảng của bạn do đó, các bảng có cùng cột sẽ không có bất kỳ sự nhầm lẫn nào

$CI->db->select('e.email'); 
$CI->db->from('emails e'); 
$CI->db->join('user_email ue', 'ue.user_id = e.id', 'left'); 
$CI->db->where('ue.user_id', $userid); 
$query = $CI->db->get(); 
+0

không hoạt động. id bảng 1 là id người dùng. Id bảng 2 là id email, nó không liên quan đến bảng 1. Bảng 3 user_id liên quan đến bảng 1. Bảng 3 email_id có liên quan đến Bảng 2. – user1884324

+0

@ user1884324 đọc truy vấn của tôi một lần nữa tôi chưa tham gia bảng người dùng của bạn, tôi có chỉ tham gia bảng 'email' và' user_email', trong truy vấn của bạn, bạn đang so sánh '$ user_id' với id của email sai, nếu bạn muốn tìm email của người dùng, sau đó sử dụng truy vấn ở trên, bạn cần phải khớp' user_id 'từ' user_email' tôi hy vọng bạn nhận được điểm của tôi –

+1

cảm ơn, nó sẽ đưa tôi một thời gian để tiêu hóa nó. – user1884324

Các vấn đề liên quan