2017-08-12 123 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

它的工作原理!有點不同於我想要的方式,但它的工作原理:-)謝謝。 –