Gruppieren von Postmetadaten über eine SQL-Abfrage

Ich benutze das WP-Plugin von jemand anderem, das viele verwandte Daten in wp_postmeta Verwendung eines “künstlichen Schlüssels” speichert. Wir entführen also wp_postmeta , um eine verschachtelte relationale database zu erstellen. So wird eine Zeile haben

  meta_id = 999 post_id = 130 meta_key = 'event_id' meta_value = '19' 

Dann enthalten 4 andere tatsächliche wp_postmeta-Zeilen, die diese post_id teilen, den Rest der Information für diese virtuelle “Zeile” von Daten. Beispielsweise

  meta_id = 989 post_id = 130 meta_key = 'Name' meta_value = 'Fred' 

Und wir werden viele “virtuelle Zeilen” (hunderte) haben, die alle die event_id von 19 teilen (und natürlich viele andere mit unterschiedlichen event_id s).

Ich habe viele SQL-Abfragen ausprobiert, aber ich bin ratlos. Wie kann ich eine Tabelle mit gruppierten Informationen für eine gemeinsame event_id erhalten? Es muss nicht alle Daten haben, nur ein Stück, wie das Feld “Name”. Ich habe eine Unterabfrage wie folgt versucht:

 SELECT meta_value from wp_postmeta WHERE meta_key='name' AND post_id IN (SELECT post_id FROM wp_postmeta WHERE meta_key='event_id' AND meta_value='19'); 

Das sieht wahrscheinlich lächerlich dumm aus – es funktioniert auch nicht. Ich habe auch JOIN versucht. Dies scheint etwas zu sein, was in der WP-Programmierung viel auftauchen würde, aber ich habe gesucht und bin ziemlich leer gelandet.

Solutions Collecting From Web of "Gruppieren von Postmetadaten über eine SQL-Abfrage"

Wenn ich deine Frage richtig verstehe, sollte das funktionieren:

 function get_event_info($event_id = 0, $info = '' ) { global $wpdb; return $wpdb->get_col( $wpdb->prepare( "SELECT meta_value from $wpdb->postmeta WHERE meta_key = '%s' AND post_id IN (SELECT DISTINCT post_id FROM $wpdb->postmeta WHERE meta_key = 'event_id' AND meta_value= %s )", $info, $event_id ) ); } 

Benutze das so:

 $names = get_event_info( 19 , 'Name' ); if ( ! empty($names) ) { echo '
    '; foreach ($names as $name) { echo '
  • ' . $name . '
  • '; } echo '
'; }

Bitte stellen Sie sicher, dass der zweite Parameter genau dem meta_key : in Ihrem Beispiel ist meta_key = 'Name' aber die SQL-Abfrage ist WHERE meta_key='name' , Groß- / Kleinschreibung ist anders!

Sie können Ihre Posts mit dem Parameter meta_query in der class WP_Query auswählen . Erhalten Sie alle Post-IDs der Posts, die eine shared event_id von 19 haben.

Sie können die IDs später verwenden, um alle notwendigen Daten zu erhalten.