2017-07-25 5 views
0

ich versucht war die Antwort im Internet zu finden, und ich habe etwas gefunden, aber ich verstehe es nicht :-)WP - Probleme mit Verbinden von zwei Tabellen

Ich habe nur zwei Tische - wp_users & wp_usermeta. Diese beiden Tabellen haben dieselbe ID (wp_users.ID und wp_usermeta.user_id). Alles, was ich will, ist, die E-Mail-Adresse von wp_users zu nehmen und sie mit dem Nicknamen von wp_usermeta zu verbinden.

ich Anfänger sind in SQL und dies wäre sehr hilfreich, wenn jemand erklären würde :-) Danke soviel :-)

<?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; 
    } 
    ?> 
+0

Sie versuchen zweimal zu verbinden wp_usermeta, einmal mit dem inneren Ausdruck kommt und einmal durch ein Komma in dem von Ausdruck. – Devon

+1

Auch Sie versuchen, die 'foreach'-Schleife auf einer Zeichenfolge auszuführen, sollte es' foreach ($ results_table_main als $ value) ' – WheatBeak

+0

Jetzt bekomme ich keinen Fehler, aber Echo wird auch nichts drucken :-) urghhh, diese ist schwer: D –

Antwort

1

Die bisherigen Antworten und Kommentare mit dem Thema helfen, aber die primären hier Problem ist, dass Sie eine Spalte abfragen, die nicht existiert, wp_usermeta.nickname

Dies ist, was Sie tun müssen:

$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'"; 

Und nur für eine gute Maßnahme t Beachten Sie, dass die zurückgegebene Variable ein Objekt ist, auf das als solches zugegriffen werden muss.

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

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

plus eins für diese foreach;) –

+0

Ja - logisch, das ist weit weg :-) Wie auch immer, immer noch Fehler -> "Abnehmbarer fataler Fehler: Objekt der Klasse stdClass konnte nicht in String umgewandelt werden ..." Ich werde versuchen es zu debuggen :-) Danke trotzdem: -) –

+0

meine letzte Änderung ansehen: D – WheatBeak

0

Sie verwenden falsche Abfrage, wie Sie benötigt.

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/>'; 
} 

Ich denke, es hilfreich sein wird

+0

Es tut mir leid, könntest du erklären, warum hast du den Buchstaben "du" anstelle von wp_users gesetzt? Und statt "wp_usermeta" setzen Sie "um". Das ist super verwirrend für mich :-( –

+0

es ist einfach zu Code für mich zu schreiben, deshalb habe ich alias verwendet –

+1

Es ist nur ein Alias, Sie können ein beliebiges Wort oder einen Buchstaben nach der Tabelle verwenden und dann müssen Sie nicht fortfahren Schreiben Sie den gesamten Tabellennamen in den Rest der Abfrage, um mehr [hier] zu erfahren (https: //www.w3schools.com/sql/sql_alias.asp) – WheatBeak

Verwandte Themen