Wordpress 사용자 및 사용자 이름 - 한 테이블의 여러 행을 다른 테이블의 한 행에 결합합니다.
wp_users 테이블과 wp_usermeta 테이블에서 뷰를 생성하여 외부 어플리케이션에서 뷰 행을 조회할 수 있도록 합니다.기본 인증 세부사항은 wp_users(사용자 이름, 비밀번호, 이메일, id 등)에 저장되며 기타 필드는 wp_usermeta 테이블의 키/값 쌍에 저장됩니다.
wp_users 테이블은 다음과 같이 구성되어 있습니다.
id | login | password | email
-----------------------------
1 | bsmith| abc123 | b@foo.com
2 | jjones| def456 | k@bah.com
wp_usermeta 테이블은 다음과 같이 구성되어 있습니다.
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
다음과 같은 데이터를 MYSQL VIEW로 만들고 싶습니다.
id | login | password | email | firstname | lastname | country
-----------------------------------------------------------------
1 | bsmith| abc123 | b@foo.com| bob | smith | denmark
2 | jjones| def456 | k@bah.com| jan | jones | germany
wp_users와 wp_usermeta 사이에 적어도 내부 결합을 해야 한다는 것을 알지만, 이러한 행을 결합하기 위해서는 wp_usermeta 내부에서 서브 쿼리를 실행해야 합니다.
사용자 행을 취득하기 위한 문의는 물론 매우 간단합니다.
select u1.id, u1.login, u1.password, u1.email from wp_users u1
메타를 행으로 가져오기 위한 쿼리는 다음과 같습니다.
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'
그러면 u1의 데이터와 u1.id = m1.userid 행의 두 쿼리를 결합하려면 어떻게 해야 합니까?
제가 아는 한, 당신은 올바른 방법으로 그것을 하고 있으며, 그것들을 모두 합치면 됩니다.
SELECT
u1.id,
u1.login,
u1.password,
u1.email,
m1.meta_value AS firstname,
m2.meta_value AS lastname,
m3.meta_value AS country
FROM wp_users u1
JOIN wp_usermeta m1 ON (m1.user_id = u1.id AND m1.meta_key = 'first_name')
JOIN wp_usermeta m2 ON (m2.user_id = u1.id AND m2.meta_key = 'last_name')
JOIN wp_usermeta m3 ON (m3.user_id = u1.id AND m3.meta_key = 'country')
WHERE
-- CONDITIONS ON the user you want to select based any field
Toote의 솔루션은 동작하지만 MySQL 데이터베이스에서는 "select * from users_with_meta_view"를 실행하는 데 약 17초가 걸립니다.
0.0054초로 줄였고 대신 다음과 같이 구성되었습니다.
CREATE OR REPLACE VIEW users_with_meta_view AS
SELECT
u.id,
u.user_login AS login,
u.user_pass AS password,
u.user_email AS email,
(select meta_value from wp_usermeta where user_id = u.id and meta_key = 'first_name' limit 1) as first_name,
(select meta_value from wp_usermeta where user_id = u.id and meta_key = 'last_name' limit 1) as last_name,
(select meta_value from wp_usermeta where user_id = u.id and meta_key = 'country' limit 1) as country
FROM wp_users u
$sql= "SELECT
u1.parent_id,
m1.meta_value AS headline,
m2.meta_value AS profilephoto
FROM wp_vandor u1
JOIN wp_usermeta m1 ON (m1.user_id = u1.child_id AND m1.meta_key = 'headline')
JOIN wp_usermeta m2 ON (m2.user_id = u1.child_id AND m2.meta_key = 'profilephoto')
WHERE m1.user_id != $currentuser_id";
$classifieds = $wpdb->get_results($sql);
foreach ($classifieds as $classified) { ?>
<p><?php echo $classified->profilephoto; ?></p>
<h3><?php echo $classified->headline; ?></h3>
<?php } ?>
언급URL : https://stackoverflow.com/questions/10730873/wordpress-users-and-usermeta-joining-multiple-rows-in-one-table-to-one-row-in
'programing' 카테고리의 다른 글
현재 JSON 어레이(예: [1, 2, 3])를 유형으로 역직렬화할 수 없습니다. (0) | 2023.03.28 |
---|---|
Angular의 개요JS 및 각도서로 관련된 UI? (0) | 2023.03.28 |
Mongoose로 기존 컬렉션에 접속하려면 어떻게 해야 하나요? (0) | 2023.03.28 |
AngularJS를 사용하여 입력 값을 제한하려면 어떻게 해야 합니까? (0) | 2023.03.23 |
CSS의 여러 점/주기 (0) | 2023.03.23 |