Support » Allgemeine Fragen » Werte aus verschiedenen Tabellen zusammenführen

  • Hallo

    Ich bin in Sachen Datenbanken ein totaler Neuling.
    Ich hoffe, Ihr seid daher etwas nachsichtig mit mir,
    wenn ich die Frage bzw. das Problem falsch angehe.

    Ich habe eine Tabelle mit dem Namen _posts und dort eine Spalte ID,
    eine Tabelle _postmeta mit den Spalten post_id undmeta_key = _regular_price,
    in der selben Tabelle _postmeta auch eine Spalte meta_key = _min_price
    und schliesslich in der selben Tabelle _postmeta auch eine Spalte meta_key = _max_price

    Hier eine etwas übersichtlichere Darstellung,
    jeweils mit einem Beispiel-Datensatz:

    _posts ID = 41 und post_type = product		
    _postmeta post_id = 41 und meta_key = _regular_price und meta_value = 90.00
    _postmeta post_id = 41 und meta_key = _min_price und meta_value = 80.00
    _postmeta post_id = 41 und meta_key = _max_price und meta_value = 91.00

    Wie frage ich die Datenbank ab,
    so dass ich die verschiedenen Tabellen zusammenführen kann
    (ID bzw. post_id ist pro zusammengehöriger Datensatz identisch)?

    Mit der folgenden Abfrage:

    $results = $wpdb->get_results( "
    
    SELECT $postmeta.* 
    FROM $postmeta INNER JOIN $posts ON $postmeta.post_id = $posts.ID 
    WHERE $posts.post_type LIKE '%product%' 
    AND $postmeta.meta_key LIKE '%_regular_price%'
    ")

    und dieser Schleife:

    foreach($results as $result){
        $meta_id    = $result->meta_id;
        $post_id    = $result->post_id;
        $meta_key   = $result->meta_key;
        $meta_value = number_format( $result->meta_value, 2 );
        
      echo "<div>meta_id: $meta_id</div>";
      echo "<div>post_id: $post_id</div>";
      echo "<div>meta_key: $meta_key</div>";
      echo "<div>meta_value: $meta_value</div>";
    }

    erhalte ich folgende Ausgabe:

    meta_id: 463
    post_id: 41
    meta_key: _regular_price
    meta_value: 200.00

    ich möchte gerne erhalten:

    meta_id: 463
    post_id: 41
    meta_key: _regular_price
    meta_value: 90.00
    min_price: 80.00
    max_price: 91.00

    Ich bin sehr dankbar, wenn mir jemand auch nur einen Tipp in eine sinnvolle Richtung geben kann.

    Ganz herzlichen Dank

    Matthias

    • Dieses Thema wurde geändert vor 5 Jahren, 11 Monaten von matthiasulrich.

    Die Seite, für die ich Hilfe brauche: [Anmelden, um den Link zu sehen]

Ansicht von 3 Antworten - 1 bis 3 (von insgesamt 3)
  • Wieso nimmst du nicht einfach die Funktionen, die WordPress dir dafür zur Verfügung stellt?

    
    $post_id = get_the_ID();
    echo 'Post-ID: ' . $post_id;
    echo 'Regulärer Preis: ' . get_post_meta( $post_id, '_regular_price', true );
    echo 'Preis Minimum: ' . get_post_meta( $post_id, '_min_price', true );
    echo 'Preis Maximum: ' . get_post_meta( $post_id, '_max_price', true );
    Thread-Starter matthiasulrich

    (@matthiasulrich)

    Vielen Dank für die Antwort.

    Was ich vergass zu erwähnen, die Anfrage wird von einer eigenen Datei gestellt,
    die später dann per cronjob aufgerufen werden soll.

    Wenn ich mit so von „aussen“ $post_id aufrufe, kriege ich keinen Wert geliefert.

    In diesem Fall musst du, um die WordPress-Funktionen nutzen zu können, den Blog-Header einbinden: require_once(dirname(__FILE__) . '/wp-blog-header.php').

    Außerdem ist get_the_ID() eine Funktion, die nur innerhalb der Loop funktioniert. Ggf. musst du also einen anderen Weg finden, um die Post-IDs abzurufen und der Funktion get_post_meta() zu übergeben.

    Ansonsten kannst du natürlich die Datenbank auch mit den üblichen PHP-Funktionen und SQL-Statements abrufen (wobei dir dann das Objekt $wpdb auch nicht zur Verfügung steht), aber da kann ich dir hier nicht weiterhelfen.

Ansicht von 3 Antworten - 1 bis 3 (von insgesamt 3)
  • Das Thema „Werte aus verschiedenen Tabellen zusammenführen“ ist für neue Antworten geschlossen.