2017-08-12 98 views
0

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

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

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

从“wp_users”我需要的是“user_email”(所以它将是SELECT user_email FROM wp_users)。

但我需要加入所谓的“wp_usermeta”我需要很多的东西,如“FIRST_NAME”,“姓氏”,“PHONE_NUMBER”,“schoolid”其他表“schoolname”等

而且这里来问题:-)

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

I的值有这样的代码:

<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。

任何想法?

回答

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

+0

这两种解决方案都不会工作......我必须找到创建查询的方法,该方法根据定义的meta_key - >采用meta_value,并且这只来自一个表。因此,让我们说,我需要schoolid - >比我必须选择wp_usermeta - > user_metakey(“schoolid”),并从这个定义的metakey我需要它的meta_value。它太复杂了。无论如何,感谢您的建议:-) –

+0

对不起,我误解了这个问题。我重新写了我的答案,所以这应该有所帮助。 –

+0

MISTER!这工作!你是最棒的! –

1

我觉得我失去了一些东西。但是你可以从sql查询中删除WHERE子句来获取所有的元值。

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

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

编辑:

在您需要选择meta_key为好,这样你就知道这个值是什么这两种情况。然后我会使用PHP将结果转换为您的需求。

+0

我做了这个代码:

get_results($ teacher_table); foreach($ results_table_main as $ value){ echo'​​'。$ value-> user_email。''; echo'​​'。$ value-> meta_value。''; }?>
邮箱地址昵称
//没有工作 –

+0

你是什么意思,没有工作?我也从你的问题中拿出first_name,我不知道它可能是名字或'名字'或....请确保您使用正确的元键。 – jh1711

+0

它的工作原理!有点不同于我想要的方式,但它的工作原理:-)谢谢。 –