Wie meta_value-Array anzeigen?

Ich versuche, eine Liste aller Beiträge zusammenzustellen, in denen die Metadaten mit einer bestimmten Suchanfrage übereinstimmen. Es scheint gut zu funktionieren, bis ich versuche, die Daten auszugeben, an denen es kontinuierlich wiederholt wird.

Ich erwartete, dass es 16 23 zeigt, aber stattdessen zeigt es 16 23 16 23 16 23 16 16 16 16 16 16 23 16 23

Hier ist der Code:

get_results("SELECT post_id FROM $wpdb->posts , $wpdb->postmeta where $wpdb->postmeta.meta_value = '2015/06/03' AND meta_key='mymvkey'", OBJECT); foreach ($results as $result){ print_r ($result->post_id); } ?> 

Ich versuche immer noch, den Umgang mit Arrays (und nicht nur in PHP) in den Griff zu bekommen, so dass ich wahrscheinlich falsch liege. Aber jeder Beitrag, den ich gelesen habe, deutet darauf hin, dass dies funktionieren sollte. Gibt es eine Möglichkeit, die Wiederholung zu stoppen und die Daten nur einmal anzuzeigen?

Solutions Collecting From Web of "Wie meta_value-Array anzeigen?"

Die SQL, die Sie möchten, wäre:

 $sql = " SELECT DISTINCT post_id FROM $wpdb->posts, $wpdb->postmeta where $wpdb->postmeta.meta_value = '2015/06/03'"; $results =$wpdb->get_results($sql); 

Aber es gibt keinen Grund, die $wpdb->posts Tabelle überhaupt mit post_id , da der post_id Wert eine $wpdb->postmeta Tabellenspalte ist.

 $sql = " SELECT DISTINCT post_id $wpdb->postmeta where $wpdb->postmeta.meta_value = '2015/06/03'"; $results =$wpdb->get_col($sql); 

Beachten Sie, dass ich $wpdb->get_results in wpdb->get_col da Sie nur eine einzige wpdb->get_col zurückgeben. Die Ergebnisse werden später weniger manipuliert.

Sie könnten auch die DISTINCT überspringen und PHP array_unique() :

 $sql = " SELECT post_id $wpdb->postmeta where $wpdb->postmeta.meta_value = '2015/06/03'"; $results =$wpdb->get_col($sql); $results = array_unique($results); 

Der weitaus korrektere Weg wäre jedoch die Verwendung von WP_Query . Ich wollte das vorschlagen, habe dann aber gemerkt, dass du gar keinen meta_key , sondern den gesamten Tisch durchsuchst. Das wird irgendwann Ärger verursachen. Angenommen, einige Plugins speichern Daten in der $wpdb->postmeta Tabelle mit diesem Datumsformat? Dann wird Ihr Code diese Werte ebenfalls abrufen, was sicherlich kein beabsichtigtes Verhalten ist. Jemand könnte sogar solche Daten als ein benutzerdefiniertes Feld direkt aus dem Lagerpost-Bearbeitungsfeld eingeben. Sie sollten einen Schlüssel angeben, etwa:

 $args = array( 'fields' = 'ids', 'ignore_sticky_posts' => true, 'meta_query' => array( array( 'key' => 'my_date_key', 'value' => '2015/06/03', ) ) ); $pids = new WP_Query($args);