Как отобразить массив meta_value?

Я пытаюсь собрать список всех сообщений, где метаданные соответствуют конкретному запросу. Кажется, он работает нормально, пока я не попытаюсь вывести данные, после чего он повторяется непрерывно.

Я ожидал, что он отобразит 16 23, но вместо этого он показывает 16 23 16 23 16 23 16 23 16 23 16 23 16 23 16 23 16 23 16 23

Вот код:

<?php global $wpdb; $results =$wpdb->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); } ?> 

Я все еще пытаюсь понять, как обрабатывать массивы (а не только в php), поэтому, вероятно, я ошибаюсь. Но каждый прочитанный пост говорит, что это должно сработать. Есть ли способ остановить его повторение и просто отобразить данные один раз?

Solutions Collecting From Web of "Как отобразить массив meta_value?"

SQL, который вы хотите, будет:

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

Но нет причин вообще $wpdb->posts таблицу $wpdb->posts , поскольку значение post_id$wpdb->postmeta .

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

Обратите внимание, что я изменил $wpdb->get_results на wpdb->get_col как вы возвращаете только один столбец данных. После этого результаты получат необходимость в меньшем количестве манипуляций.

Вы также можете пропустить DISTINCT и использовать array_unique() PHP:

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

Однако гораздо более правильным способом было бы использовать WP_Query . Я собирался предположить это, но потом заметил, что вы вообще не ищете meta_key , а ищете всю таблицу. В конечном итоге это вызовет проблемы. Предположим, что некоторые плагины хранят данные в $wpdb->postmeta с этим форматом даты? Тогда ваш код также будет извлекать эти значения, что, безусловно, не предназначено для поведения. Кто-то может даже ввести такие даты, как пользовательское поле, прямо из панели редактирования публикации. Вы должны указать ключ, например:

 $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);