wpdb::get_col()
Делает запрос и получает данные одной колонки таблицы базы данных в виде массива.
Если запрос вернул больше чем одну колонку (столбец), то функция вернет только данные первого столбца. Можно указать отступ в параметре $column_offset, чтобы получить данные не первого столбца, а например второго: $column_offset = 1.
Если указать $query = null, то функция вернет указанную колонку из предыдущего запроса. Используя это свойство можно получить данные других колонок из уже сделанного запроса.
Метод класса: wpdb{}
Хуков нет.
Возвращает
Массив. Индексный массив с данными запроса. Пустой массив, когда не удалось получить данные.
Использование
global $wpdb; $wpdb->get_col( $query, $x );
- $query(строка/null)
- Запрос который нужно выполнить. Можно установить этот параметр в значение null, тогда функция вернет результат последнего запроса.
По умолчанию: NULL (предыдущий запрос) - $x(число)
- Индекс колонки данные которой нужно вернуть.
По умолчанию: 0 (первая колонка)
Примеры
#1 Пример того как работает метод и что возвращает
Допустим у нас есть такой запрос на получение всех ревизий:
// укажем в запросе одно поле $revision_ids = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_type = 'revision'" ); // укажем в запросе все поля $revision_ids = $wpdb->get_col( "SELECT * FROM $wpdb->posts WHERE post_type = 'revision'" ); /* В обоих случаях вернется одинаковый массив. Когда указываются все поля, get_col получает только первое - это ID Array( [0] => 106 [1] => 101 [2] => 102 [3] => 103 ... ) */
#2 Использование без указания $query параметра
// сначала сделаем запрос $wpdb->query( "SELECT * FROM $wpdb->posts WHERE post_type = 'revision' LIMIT 10" ); // теперь получим данные этого запроса $revision_ids = $wpdb->get_col( null ); $revision_names = $wpdb->get_col( null, 5 ); // 5 - post_title /* Array ( [0] => 9949 [1] => 9957 [2] => 10125 [3] => 10154 [4] => 10221 [5] => 10235 [6] => 10319 [7] => 10496 [8] => 10532 [9] => 10568 ) Array ( [0] => wp_tempnam [1] => Шаблоны страницы для типов записей в WP 4.7 [2] => Политика конфиденциальности [3] => walker_nav_menu_start_el [4] => Вывод пагинации [5] => enter_title_here [6] => Smart Custom Fields - простой плагин метаполей [7] => register_post_type [8] => О сайте [9] => REST API в WordPress ) */
#3 NULL вместо пустой строки
Этот метод возвращает NULL в качестве значения поля, если в значении пустая строка (проверял на версии WP 5.1.1). Но если нам нужно получить оригинальные данные (пустую строку), можно использовать такую замену get_col():
$wpdb->query( "SELECT * FROM $wpdb->posts WHERE post_type = 'revision'" ); $ids = wp_list_pluck( $wpdb->last_result, 'ID' );
#4 Выбор столбца из результатов запроса
Для этого примера представим, что у нас блог об автомобилях. Каждый пост описывает какой-либо автомобиль (например, Ford Mustang 1969 года). Для каждого поста предусмотрено по 3 произвольных поля: manufacturer (производитель), model(модель) и year(год выпуска). Этот пример выведет на экран заголовки постов, отфильтрованных по производителю (ford) и отсортированных по модели и году.
get_col здесь используется для того, чтобы получить массив ID всех записей, удовлетворяющих определенным критериям и отсортированных в нужном порядке. Затем через цикл foreach мы выводим заголовки по имеющимся у нас ID:
<?php
$meta_key1 = 'model';
$meta_key2 = 'year';
$meta_key3 = 'manufacturer';
$meta_key3_value = 'Ford';
$postids = $wpdb->get_col($wpdb->prepare("
SELECT key3.post_id
FROM $wpdb->postmeta key3
INNER JOIN $wpdb->postmeta key1
on key1.post_id = key3.post_id
and key1.meta_key = %s
INNER JOIN $wpdb->postmeta key2
on key2.post_id = key3.post_id
and key2.meta_key = %s
WHERE key3.meta_key = %s
and key3.meta_value = %s
ORDER BY key1.meta_value, key2.meta_value",$meta_key1, $meta_key2, $meta_key3, $meta_key3_value));
if ($postids) {
echo 'List of ' . $meta_key3_value . '(s), sorted by ' . $meta_key1 . ', ' . $meta_key2;
foreach( $postids as $id ){
$post = get_post(intval($id));
setup_postdata($post);
?>
<p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
<?php
}
} #5 Список постов которые имеют определенное произвольное поле (Color)
Но отсортированы они по значению другого произвольного поля (Display_Order).
$meta_key1 = 'Color';
$meta_key2 = 'Display_Order';
$postids = $wpdb->get_col($wpdb->prepare("
SELECT key1.post_id
FROM $wpdb->postmeta key1
INNER JOIN $wpdb->postmeta key2
on key2.post_id = key1.post_id
and key2.meta_key = %s
WHERE key1.meta_key = %s
ORDER BY key2.meta_value+(0) ASC",
$meta_key2,$meta_key1));
if ($postids) {
echo 'List of '. $meta_key1 . ' posts, sorted by ' . $meta_key2 ;
foreach ($postids as $id) {
$post=get_post(intval($id));
setup_postdata($post);?>
<p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
<?php
}
}
Список изменений
| С версии 0.71 | Введена. |
Код wpdb::get_col() wpdb::get col WP 7.0
public function get_col( $query = null, $x = 0 ) {
if ( $query ) {
if ( $this->check_current_query && $this->check_safe_collation( $query ) ) {
$this->check_current_query = false;
}
$this->query( $query );
}
$new_array = array();
// Extract the column values.
if ( $this->last_result ) {
for ( $i = 0, $j = count( $this->last_result ); $i < $j; $i++ ) {
$new_array[ $i ] = $this->get_var( null, $x, $i );
}
}
return $new_array;
}