Tôi muốn tạo một khung nhìn từ cả bảng wp_users và wp_usermeta để tôi có thể truy vấn các hàng trong khung nhìn từ một ứng dụng bên ngoài. Chi tiết xác thực cơ bản được lưu trữ trong wp_users (ví dụ: tên người dùng, mật khẩu, email, id) và các trường khác được lưu trữ trong cặp khóa/giá trị trong bảng wp_usermeta.Người dùng Wordpress và usermeta - nối nhiều hàng trong một bảng vào một hàng trong một bảng khác
bảng wp_users được cấu trúc như thế này:
id | login | password | email
-----------------------------
1 | bsmith| abc123 | [email protected]
2 | jjones| def456 | [email protected]
bảng wp_usermeta được cấu trúc như thế này:
id | user_id | meta_key | meta_value
------------------------------------
1 | 1 | firstname| bob
2 | 1 | lastname | smith
3 | 1 | country | denmark
4 | 2 | firstname| jan
5 | 2 | lastname | jones
6 | 2 | country | germany
Tôi muốn kết thúc với dữ liệu như thế này như một VIEW MYSQL:
id | login | password | email | firstname | lastname | country
-----------------------------------------------------------------
1 | bsmith| abc123 | [email protected]| bob | smith | denmark
2 | jjones| def456 | [email protected]| jan | jones | germany
Tôi biết tôi cần phải làm ít nhất một sự liên kết bên trong giữa wp_users và wp_usermeta, tuy nhiên tôi cũng cần thực hiện truy vấn phụ bên trong wp_usermeta để nối các hàng đó lại với nhau.
Truy vấn tôi có để nhận được hàng sử dụng tất nhiên là chết dễ dàng:
select u1.id, u1.login, u1.password, u1.email from wp_users u1
Truy vấn tôi có để nhận được meta như một hàng này là:
select m1.user_id, m1.meta_value as firstname, m2.meta_value as lastname, m3.meta_value as country
from wp_usermeta m1
join wp_usermeta m2 on (m1.user_id = m2.user_id and m2.meta_key = 'last_name')
join wp_usermeta m3 on (m2.user_id = m3.user_id and m3.meta_key = 'country')
where m1.meta_key = 'first_name'
Vì vậy, làm thế nào để Tôi tham gia hai truy vấn này cùng nhau - dữ liệu của u1 và hàng u1.id = m1.userid?
Bạn đang có kế hoạch tìm kiếm người dùng dựa trên một số đặc tính meta_value? nếu không, bạn chỉ có thể lưu trữ các thuộc tính trong một trường meta_value được tuần tự hóa đơn (mã hóa json hoặc mã hóa php) – Ben
@Ben: nope, một ứng dụng bên ngoài sẽ kết nối để truy vấn dữ liệu tương tác – frumbert