web-dev-qa-db-ja.com

自分のブログと一緒にすべてのユーザーのリストを取得するためのSQLクエリ

複数サイトのワードプレスインストールで、自分がメンバーであるブログとともにユーザーのリストを照会する方法。

例えば、私は以下のような結果が必要です

user domain
abc  xyz.com
abc  example.com
ggh  example.com

以下のクエリを試しましたが、すべてのドメインが表示されていません。

SELECT DISTINCT a.user_login, a.user_email, c.domain
FROM wp_users a
JOIN wp_usermeta b ON a.id = b.user_id
JOIN wp_blogs c ON b.meta_value = c.site_id
LIMIT 0 , 100

ネットワーク/マルチサイトがどのように機能するのかわかりません。誰でも結果を取得する方法を教えてください。

2
NEO

特定のユーザーのすべてのブログを取得するには、 get_blogs_of_user() を使用します。

ユーザーによってソートされたリストを取得するには:

global $wpdb;
$blogs = array();
$user_ids = $wpdb->get_col( 'SELECT ID FROM $wpdb->users' );
foreach( $user_ids as $user_id ) {
    $blogs[$user_id] = get_blogs_of_user( $user_id );
}
// you can use var_dump( $blogs ); to see what's in the $blogs array
2
Pat J

同じことが必要なので、wp_usermetaテーブルでキーデータを見つけることができました。これは私のために働いた:

SELECT u.user_login, b.domain,
  SUBSTRING_INDEX(SUBSTRING_INDEX(um.meta_value,'"', 2), '"', -1) as role
FROM wp_users u
JOIN wp_usermeta um ON u.ID = um.user_id
JOIN wp_blogs b ON b.blog_id = SUBSTRING(um.meta_key, 4, LENGTH(um.meta_key)-16)
WHERE um.meta_key LIKE 'wp_%_capabilities'

結果:

user_login    domain       role
============  ============ ================
webmaster     blog1.com    administrator
user          blog1.com    editor
webmaster     blog2.com    administrator
2
Wraezor Sharp

コメントを残すことはできませんが、Wraezor Sharpからの回答は私にとってはかなりうまくいきました。私はユーザーの電子メールアドレスが必要でした。私たちのマルチサイトインスタンスはすべて同じドメイン名上にありました。そして私は管理者だけを望み、購読者は望みませんでした。これが私が思いついたものです。

SELECT
  u.user_login
  , u.user_email
  , concat('https://', b.domain, b.path) as site
  , SUBSTRING_INDEX(SUBSTRING_INDEX(um.meta_value,'"', 2), '"', -1) as role
FROM
  wp_users u
  JOIN wp_usermeta um ON u.ID = um.user_id
  JOIN wp_blogs b ON b.blog_id = SUBSTRING(um.meta_key, 4, LENGTH(um.meta_key)-16)
WHERE
  um.meta_key LIKE 'wp_%_capabilities'
  AND SUBSTRING_INDEX(SUBSTRING_INDEX(um.meta_value,'"', 2), '"', -1) IN ('administrator', 'editor')
ORDER BY
  site asc
;
0
mvc