SQL-Abfrage für benutzerdefinierten Beitragstyp und mehrere benutzerdefinierte Felder

Lesezeit: 3 Minuten

Benutzer-Avatar
Benutzer2106176

ich benutze WP-Datentabellen um eine Tabelle aus der SQL-Datenbank zu erstellen. Im WordPress-Backend sah der zu verwendende Beispielcode so aus:

SELECT post_id, post_date
FROM wp_posts
WHERE post_type="custom_post_type"
AND post_status="publish"

Ich versuche, benutzerdefinierte Feldwerte aus dem Post-Meta zu erhalten. Hier ist, was ich bisher habe …

SELECT post_id, post_date
FROM wp_posts
WHERE post_type="custom_post_type"
AND post_status="publish"
AND SELECT custom_field_key_1, custom_field_key_2, custom_field_key_3
FROM wp_postmeta
WHERE post_id = post_id

AKTUALISIEREN:

Ich habe festgestellt, dass p.ID anstelle von post_id benötigt wird und dass ich nach dem meta_key suchen muss. Etwas wie…

SELECT p.post_title, 
       p.post_date,
       pm.meta_key = 'custom_field_key'
FROM wp_posts p 
INNER JOIN wp_postmeta pm 
ON p.ID = pm.post_id
WHERE p.post_type="custom_post_type"
AND p.post_status="publish"

  • Ich glaube, Sie brauchen JOIN hier.

    – PM77-1

    2. März 2013 um 0:15 Uhr

Benutze ein INNER JOIN:

SELECT p.post_id, 
       p.post_date, 
       pm.custom_field_key_1, 
       pm.custom_field_key_2, 
       pm.custom_field_key_3
FROM wp_posts p 
   INNER JOIN wp_postmeta pm 
       ON p.post_id = pm.post_id
WHERE p.post_type="custom_post_type"
   AND p.post_status="publish"

  • @ user2106176 – froh, dass das geholfen hat. Wenn ich mir Ihr Update anschaue, denke ich, dass Sie “pm.meta_key = ‘custom_field_key'” in Ihre WHERE-Klausel verschieben müssen. Sie können in Ihrer SELECT-Anweisung keinen Feldwert festlegen. Viel Glück!

    – sgeddes

    2. März 2013 um 1:30 Uhr

  • Ich weiß, dass diese Antwort zu alt ist, aber sie funktioniert jetzt mit custom_field_key

    – Naren Verma

    8. Januar um 9:36

Unter der Annahme, dass Standard-SQL unterstützt wird, benötigen Sie so etwas (ungetestet):

SELECT w.post_id, w.post_date, m.custom_field_key_1, m.custom_field_key_2, m.custom_field_key_3
FROM wp_posts w, wp_postmeta m
WHERE post_type="custom_post_type" AND post_status="publish"
AND w.post.id = m.post.id

Sie können dies versuchen.

SELECT p.post_id, p.post_date,
    pm.custom_field_key_1, pm.custom_field_key_2, pm.custom_field_key_3
FROM wp_posts p
JOIN wp_postmeta pm ON p.post_id = pm.post_id
WHERE p.post_type="custom_post_type"
AND p.post_status="publish"

Benutzer-Avatar
Miguel Garrido

Ok, obwohl Sie eine Antwort aktualisiert haben. Ich habe dein Beispiel genommen und folgendes herausgefunden:

SELECT p.ID, 
       p.post_title, 
       pm.meta_value as 'value1', 
       pma.meta_value as 'value2'

FROM  wp_posts p 
      INNER JOIN wp_postmeta AS pm  ON pm.post_id  = p.ID
      INNER JOIN wp_postmeta AS pma ON pma.post_id = p.ID

WHERE
      pma.meta_key = 'custom_field_key_1' AND
      pm.meta_key = 'custom_field_key_2' AND

      p.post_type="your_post_type" AND 
      p.post_status="publish"

Hier verwende ich also Alias AS für Werte, die in derselben Tabelle gehostet werden, INNER JOIN zum wp_postmeta und post_id und das ist alles.

Referenzen: Mehrere Inner Join derselben Tabelle

Auf diese Weise erhalten Sie ein Array mit Beiträgen und Ihren ausgewählten benutzerdefinierten Feldern:

array(1) {
    [0]=> object(stdClass)#341 (4) {
          ["ID"]=>    string(1) "1123"
          ["post_title"]=>  string(15) "Your post title"
          ["custom_field_key_1"]=> string(12) "Your value 1 "
          ["custom_field_key_2"]=> string(29) "Your value 2"
}

Sie können beliebig viele Aliasnamen und meta_key hinzufügen. Ich hoffe das hilft!

1369960cookie-checkSQL-Abfrage für benutzerdefinierten Beitragstyp und mehrere benutzerdefinierte Felder

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy