高级Wordpress SQL查询

时间:2017-08-12 22:53:47

标签: php mysql wordpress

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>

这有效,但我不知道如何修改它以获得更多带有meta_values的meta_keys。

有什么想法吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

或者使用OR选择所需的值。

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

编辑:

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