Erhalte nur benutzte meta_values

So bekomme ich die Meta-Werte:

$apart_locations = $wpdb->get_col( "SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = 'postal_location' ORDER BY meta_value ASC" ); 

So erhalte ich die veröffentlichten Posts eines benutzerdefinierten Post-Typs:

 $apartments = $wpdb->get_col( " SELECT DISTINCT( post_id ) FROM $wpdb->postmeta WHERE meta_key IN( $fields_string ) AND post_id IN ( SELECT ID FROM $wpdb->posts WHERE post_type = 'tvr_apartment' AND post_status = 'publish' ) ORDER BY rand() " ); 

Also meine Sorge hier ist

wie kann ich die meta_values ​​nur von denen bekommen, die von mindestens 1 veröffentlichten post verwendet werden?

irgendeine Idee wie?

-BEARBEITEN-

Ich versuche dies zu tun, weil die erste Abfrage Metas zurückgibt, die nicht verwendet werden:

Bildbeschreibung hier eingeben

Solutions Collecting From Web of "Erhalte nur benutzte meta_values"

Ich bin mir nicht sicher, ob ich deine Frage richtig beantworte und weiß daher nicht, ob diese Antwort in die richtige Richtung geht … Ist es das, was du versuchst zu erreichen?

 $apart_locations = $wpdb->get_col( "SELECT meta_value FROM $wpdb->postmeta AS wppm LEFT JOIN $wpdb->posts AS wpp ON wppm.post_id = wpp.ID WHERE wppm.meta_key = 'postal_location' AND wpp.post_status = 'publish' ORDER BY wppm.meta_value ASC" ); 

Ich denke, du machst hier nicht das Richtige. Warum benutzt du nicht WP_QUERY? Es wird Ihnen Posts geben, wie immer Sie wollen und von den Posts erhalten Sie Ihre Meta-Werte.

 $params = array( 'post_type' => 'your post type', 'post_status' => 'publish', 'posts_per_page' => 10, 'meta_key' => 'your key', 'meta_value' => ' ', 'meta_compare' => '!=', 'ignore_sticky_posts' => 1, 'orderby' => 'meta_value', 'order' => 'ASC' ); $new_query = new WP_Query($params); 

Wenn Sie so etwas filtern, sollten Sie sofort alle Posts erhalten, die den meta_key verwenden. Hoffe das hilft!

* Update: Hier ist ein Beispiel aus dem Codex selbst zur Abfrage mit mehreren benutzerdefinierten Feldern. Wenn Sie nicht Hunderte von Feldern haben, sollte dieser Ansatz sehr gut funktionieren. Wenn Sie SQL-Abfragen schreiben, müssen Sie sie auch so anpassen, dass sie keinen Engpass für die performance darstellen.

Probieren Sie WHERE meta_value != '' , um nach leeren Werten zu WHERE meta_value != '' .

Dies sollte Ihre letzte Abfrage sein:

$apart_locations = $wpdb->get_col( "SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = 'postal_location' AND meta_value != '' ORDER BY meta_value ASC" );

BEARBEITEN: Diese Abfrage sollte Ihnen helfen, die gewünschten Werte zu erhalten, damit Sie sie mit einer Post-Abfrage kombinieren können.