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.
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.