【问题标题】:Advanced Wordpress SQL Query高级 Wordpress SQL 查询
【发布时间】:2018-01-21 04:13:08
【问题描述】:

4 小时后我找不到解决方案,如何正确编写 SQL 查询来回显两个表中的数据。

我有两个表,我需要“加入”他们的数据。

第一个表是“wp_users”,第二个是“wp_usermeta”。

从“wp_users”中,我只需要“user_email”(所以应该是 SELECT user_email FROM wp_users)。

但我需要加入另一个名为“wp_usermeta”的表,我需要很多东西,比如“first_name”、“last_name”、“phone_number”、“schoolid”、“schoolname”等。

问题来了:-)

在 wp_usermeta 中,我需要从“meta_key”和“meta_value”两列读取数据。 “meta_key”列存储变量的名称(例如“schoolid”,“meta_value”列存储meta_key的值(例如“XXXXXXXX”)。

我有这个代码:

  <table>
    <tr><th>Email Address</th><th>First Name</th></tr>
  <?php
   $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 '<tr><td>'.$value->user_email .'</td>';
    echo '<td>'.$value->meta_value .'</td>';
     } ?>
    </table>

这可行,但我不知道如何修改它以获取更多带有元值的元键。

有什么想法吗?

【问题讨论】:

    标签: php mysql wordpress


    【解决方案1】:

    你想要的可以用一个查询来完成,但它可能会变得一团糟。您可能需要考虑进行多个查询。但这是单个查询的样子:

    SELECT wp_users.user_email,
           usermeta_firstname.meta_value AS first_name,
           usermeta_lastname.meta_value AS last_name
      FROM wp_users
             INNER JOIN wp_usermeta AS usermeta_firstname
                     ON wp_users.ID = usermeta_firstname.user_id
                    AND usermeta_firstname.meta_key = 'first_name'
             INNER JOIN wp_usermeta AS usermeta_lastname
                     ON wp_users.ID = usermeta_lastname.user_id
                    AND usermeta_lastname.meta_key = 'last_name'
    

    然后继续为所需的每个字段重新加入 wp_usermeta 表。请注意,如果您要使用INNER JOIN,则所有值都必须存在。如果您想考虑可能的缺失值,请改用LEFT JOIN

    【讨论】:

    • 这两种解决方案都不起作用...我必须以某种方式找到创建查询的方法,该查询根据定义的 meta_key 获取 meta_value -> 这仅来自一个表。所以可以说,我需要 schoolid -> 而不是我必须选择 wp_usermeta -> user_metakey("schoolid") 并且从这个定义的元键中我需要它的元值。太复杂了无论如何,感谢您的建议:-)
    • 对不起,我误解了这个问题。我重写了我的答案,所以这应该会有所帮助。
    • 不错!现在如何将这些结果插入到名为“compiled_user_data”的新表中?
    【解决方案2】:

    我觉得我错过了什么。但是您可以从 sql 查询中删除 WHERE 子句以获取所有元值。

    或者用 OR 选择你想要的值。

    WHERE wp_usermeta.meta_key = 'nickname'
    OR wp_usermeta.meta_key = 'fist_name'
    /*...*/
    

    编辑:

    在这两种情况下,您还需要 SELECT meta_key,这样您就知道值是什么。然后我会使用 PHP 将结果转换为您的需要。

    【讨论】:

    • 我做了这个代码:get_results($teacher_table); foreach ($results_table_main as $value){ echo ''; echo ''; } ?>
      电子邮件地址 昵称 名字
      '.$value->user_email .''.$value->meta_value .'
      //没有工作
    • 没有工作是什么意思?我也从你的问题中取了名字。我不知道它可能是名字还是 First Name 或 ....请确保您使用正确的元键。
    • 有效!与我想要的方式有点不同,但它有效:-) 谢谢。
    猜你喜欢
    • 2021-02-11
    • 2015-03-23
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 2018-02-04
    • 2016-12-04
    相关资源
    最近更新 更多