wpdb::get_col() publicWP 0.71

Робить запит і отримує дані однієї колонки таблиці бази даних як масиву.

Якщо запит повернув більше ніж одну колонку (стовпець), то функція поверне лише дані першого стовпця. Можна вказати відступ у параметрі $column_offset , щоб отримати дані не першого стовпця, наприклад другого: $column_offset = 1.

Якщо вказати $query = null , функція поверне вказану колонку з попереднього запиту. Використовуючи цю властивість, можна отримати дані інших колонок з вже зробленого запиту.

{} Це метод класу: wpdb{}

Хуків немає.

Повертає

Массив. Індексний масив із даними запиту. Порожній масив, коли не вдалося отримати дані.

Використання

Global $wpdb;
$wpdb->get_col($query, $x);
$query
(рядок/null)
Запит, який потрібно виконати. Можна встановити цей параметр значення
null , тоді функція поверне результат останнього запиту.


Типово: NULL (попередній запит)
$x
(число)
Індекс колонки, дані якої потрібно повернути.


За замовчуванням: 0 (перша колонка)

Приклади

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
	...
)
*/
0

#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
)
*/
0

#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' );
0

#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
  }
}
0

#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() WP 6.0.2

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;
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *