使用自定义PHP从WordPress数据库中获取数据[关闭]

mfuanj7w  于 11个月前  发布在  WordPress
关注(0)|答案(2)|浏览(150)

已关闭。此问题需要details or clarity。目前不接受回答。
**要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

16天前关闭
这篇文章是编辑并提交审查16天前.
Improve this question
不使用WordPress或编写基于WordPress的插件,我希望能够从WordPress的数据库表中获取数据,并插入到它。我将编写的代码在任何程序或面向对象程序,但它肯定是WordPress框架之外。
现在,我可以从wp_users表中获取数据,但尝试将wp_userswp_usermeta连接不正确。我想在usermeta表中显示与特定用户相关的数据,但由于wp_usermeta表使用meta_keymeta_value来保存这些数据,因此获取数据有点困难。当表列是Meta_key和meta_value时,如何获取用户的first_name和last_name?
当前查询:

SELECT a.*, b1.meta_value AS first_name, b1.*, b2.meta_value AS last_name, b2.*
FROM wp_users a
INNER JOIN wp_usermeta b1 ON b1.user_id = a.ID AND b1.meta_key = 'first_name' 
INNER JOIN wp_usermeta b2 ON b2.user_id = a.ID AND b2.meta_key = 'last_name'
WHERE (b1.meta_value LIKE '%_%' OR b2.meta_value LIKE '%_%' OR a.user_email LIKE '%_%')

字符串
循环:

<tr>
    <td><?= $row['ID']; ?></td>
    <td><?= $row['user_login']; ?></td>
    <td><?= $row['user_email']; ?></td>
    <td><?= $row['first_name']; ?></td>
    <td><?= $row['last_name']; ?></td>
    <td><?= $row['phone']; ?></td>
    <td>
        <?php
        if ( $row['user_id_verified'] == 1 ){
            echo "Yes";
        } else {
            echo "No";
        }
        ?>
    </td>
    <td><?= date('M j, Y h:i A', strtotime($row['user_registered'])); ?></td>
</tr>


输出:

我试过使用INNER JOIN,但结果不正确。我可能只是在下一个用户之前的两个页面上(表分页)有一个特定的用户。
我想每个用户的数据都在同一行,这也将有助于以后的更新。

1dkrff03

1dkrff031#

假设你有一个用户ID,你想检索该用户的first_name和last_name,你可以使用如下查询:

SELECT
  u.ID,
  u.user_login,
  u.user_email,
  MAX(CASE WHEN m.meta_key = 'first_name' THEN m.meta_value END) AS first_name,
  MAX(CASE WHEN m.meta_key = 'last_name' THEN m.meta_value END) AS last_name
FROM
  wp_users u
LEFT JOIN
  wp_usermeta m ON u.ID = m.user_id
WHERE
  u.ID = :user_id
GROUP BY
  u.ID, u.user_login, u.user_email;

字符串

**获取用户的所有信息:**假设您有一个用户ID,并且您希望检索以下详细信息:

  • ID
  • 用户名
  • 电子邮件
  • 名字
  • 姓氏
  • 电话
  • 角色
  • 日期

您可以像下面这样使用此更新的查询:

SELECT
  u.ID,
  u.user_login AS Username,
  u.user_email AS Email,
  MAX(CASE WHEN m1.meta_key = 'first_name' THEN m1.meta_value END) AS First_name,
  MAX(CASE WHEN m1.meta_key = 'last_name' THEN m1.meta_value END) AS Last_name,
  MAX(CASE WHEN m2.meta_key = 'phone' THEN m2.meta_value END) AS Phone,
  CASE WHEN r.meta_value LIKE '%administrator%' THEN 'Administrator'
       WHEN r.meta_value LIKE '%editor%' THEN 'Editor'
       WHEN r.meta_value LIKE '%author%' THEN 'Author'
       WHEN r.meta_value LIKE '%contributor%' THEN 'Contributor'
       WHEN r.meta_value LIKE '%subscriber%' THEN 'Subscriber'
       ELSE 'Unknown'
  END AS Status,
  u.user_registered AS Date
FROM
  wp_users u
LEFT JOIN
  wp_usermeta m1 ON u.ID = m1.user_id
LEFT JOIN
  wp_usermeta m2 ON u.ID = m2.user_id
LEFT JOIN
  wp_usermeta r ON u.ID = r.user_id AND r.meta_key = 'wp_capabilities'
WHERE
  u.ID = :user_id
GROUP BY
  u.ID, u.user_login, u.user_email, u.user_registered;

**注意:*':user_id'替换为您要获取数据的实际用户ID。此外,请确保您在查询中使用了正确的表前缀,因为它可能会因您的WordPress安装而异。

1hdlvixo

1hdlvixo2#

要从WordPress数据库表wp_userswp_usermeta中为用户获取first_namelast_name,您需要执行正确连接这些表的SQL查询。由于wp_usermeta表使用meta_keymeta_value列存储用户元数据,您需要使用条件连接来获取与特定用户相关的first_namelast_name的特定meta_value
这里有一个例子,你可以如何实现这一点:

SELECT u.ID, u.user_login, 
       MAX(CASE WHEN um1.meta_key = 'first_name' THEN um1.meta_value END) AS first_name,
       MAX(CASE WHEN um1.meta_key = 'last_name' THEN um1.meta_value END) AS last_name
FROM wp_users u
LEFT JOIN wp_usermeta um1 ON u.ID = um1.user_id
WHERE um1.meta_key IN ('first_name', 'last_name')
GROUP BY u.ID, u.user_login;

字符串
说明:
1.我们从wp_users表(u)开始,使用LEFT JOIN将其与wp_usermeta表(um1)连接,并使用user_id作为公共字段。
1.在SELECT语句中,我们使用条件聚合(MAX with CASE语句)来获取meta_keyfirst_namelast_namemeta_value
1.我们使用一个WHERE子句来过滤wp_usermeta中的行,其中meta_key是'first_name'或'last_name'。
1.最后,我们从wp_users表中GROUP BY IDuser_login,以确保每个用户的数据都在同一行上。
此查询将返回一个结果集,每个用户对应一行,其first_namelast_name显示为单独的列。
您可以在PHP代码(过程或OOP)中使用此SQL查询从WordPress数据库获取数据,而无需依赖WordPress框架。

相关问题