【问题标题】:WP - troubles with joining two tablesWP - 加入两个表的麻烦
【发布时间】:2017-07-25 19:20:59
【问题描述】:

我试图在互联网上找到答案,我找到了一些东西,但我不明白:-)

我只有两个表 - wp_users 和 wp_usermeta。这两个表具有相同的 ID(wp_users.ID 和 wp_usermeta.user_id)。我想要的只是从 wp_users 获取电子邮件地址,并使用 wp_usermeta 的昵称加入它。

我是 sql 初学者,如果有人能解释一下,这将非常有帮助 :-) 非常感谢 :-)

    <?php
    //I just want tu print in echo all user emails connected with their nicknames from two separate tables - wp_users
    //and wp_user_meta. I am trying to connect these tables with "ID" which has these two tables the same (inner join part)
    $teacher_table = "SELECT wp_users.user_email, wp_usermeta.nickname
                    FROM wp_users,wp_usermeta
                    INNER JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id";
    $results_table_main = $wpdb->get_results($teacher_table);

    foreach ($teacher_table as $value){
        echo $value;
    }
    ?>

【问题讨论】:

  • 您尝试加入 wp_usermeta 两次,一次使用内部连接表达式,一次使用逗号在 from 表达式中。
  • 另外你正在尝试在一个字符串上运行foreach循环,它应该是foreach($results_table_main as $value)
  • 现在我没有收到任何错误,但 echo 也不会打印任何内容 :-) urghhh,这个很难:D
  • 给我一分钟,我正在给你写一个完整的答案:)
  • 我认为问题在于操纵 wp_usermeta。在 wp_users 中,该列称为“user_email”,因此非常清楚。但我想从 user_meta -> meta_key.nickname = 这个昵称必须取自 meta_value 列“:-) 这就是为什么这么复杂:-(

标签: php sql wordpress join


【解决方案1】:

以前的答案和 cmets 将有助于解决这个问题,但这里的主要问题是您正在查询一个不存在的列,wp_usermeta.nickname

这是你需要做的:

$teacher_table = "SELECT wp_users.user_email, wp_usermeta.meta_value 
FROM wp_users INNER JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id
WHERE wp_usermeta.meta_key = 'nickname'";

为了更好地衡量你的代码的其余部分,请注意返回的变量是一个对象,因此必须这样访问。

 $results_table_main = $wpdb->get_results($teacher_table);

foreach ($results_table_main as $value){
   echo $value->user_email;
   echo $value->meta_value;
}

【讨论】:

  • 加一个 foreach ;)
  • 是的-从逻辑上讲,这是要走的路:-)无论如何,仍然出现错误->“可捕获的致命错误:stdClass类的对象无法在...中转换为字符串”我会尝试调试它 :-) 还是谢谢你 :-)
  • @WheatBeak,请检查问题后的标签,然后请提供答案...此问题与Wordpress有关
  • @vjytiwari 是的,我从$wpdbwp_userswp_usermeta 那里收集到了这么多东西。有什么问题?
  • @WheatBeak ,仍然会给出错误,因为您没有将 $wpdb 声明为全局?
【解决方案2】:

您使用了错误的查询。

global $wpdb;
$sql = "SELECT u.user_email , 
       um.meta_value AS nickname
   FROM wp_users u
   INNER JOIN wp_usermeta um ON u.ID = um.user_id
   WHERE um.meta_key = 'nickname'";

$results = $wpdb->get_results($sql);

foreach ($results as $value){
    echo "EMAIL : ".$value->user_email . "<br/>";
    echo "NICKNAME : ".$value->nickname. "<br/>";
    echo '<br/>';
}

我觉得会有帮助

【讨论】:

  • 对不起,你能解释一下,你为什么放字母“u”而不是wp_users?而不是“wp_usermeta”,而是“嗯”。这让我非常困惑:-(
  • 对我来说写代码很容易,这就是我使用别名的原因
  • 它只是一个别名,你可以在表后使用任何你想要的单词或字母,然后你不需要在查询的其余部分继续写出整个表名。你可以了解更多关于他们here
猜你喜欢
  • 2014-10-13
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-01
  • 2012-11-05
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
相关资源
最近更新 更多