# WPDB::GET_COL() │ ПУБЛИЧНЫ�� │ WP 0.71
Метод get_col() используется для получения одного столбца из базы данных. Он выполняет SQL-запрос и возвращает указанный столбец из результата.
Если запрос ($query) не указан, метод вернет указанный столбец из предыдущего SQL-результата.
## Возврат
Метод возвращает массив, который содержит данные из базы данных. Индексация начинается с 0, что соответствует номеру строки результата SQL.
## Использование
```php
global $wpdb;
$wpdb->get_col( $query, $x );
- $query (string|null): SQL-запрос. По умолчанию используется предыдущий запрос.
- $x (int): Индекс столбца, который нужно вернуть (индексация начинается с 0).
Примеры
Пример 1: NULL вместо пустой строки
Этот метод возвращает NULL, если значение является пустой строкой. Но если нужно получить исходные данные (пустую строку), воспользуйтесь get_col().
$wpdb->query( "SELECT * FROM $wpdb->posts WHERE post_type = 'revision'" );
$ids = wp_list_pluck( $wpdb->last_result, 'ID' );
Пример 2: Пример работы метода
Предположим, что нам нужно получить все ревизии:
// указываем одно поле в запросе
$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
...
)
Пример 3: Использование без параметра $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] => Умные пользовательские поля - простой плагин для метаполей
[7] => register_post_type
[8] => О сайте
[9] => REST API в WordPress
)
Пример 4: Выбор столбца из результатов запроса
Предположим, у нас есть блог о машинах. Каждый пост описывает какую-либо машину (например, Ford Mustang 1969 года). Для каждого поста есть 3 пользовательских поля: производитель, модель и год. Этот пример отобразит заголовки постов, отфильтрованных по производ��телю (ford) и отсортированных по модели и году.
$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 'Список ' . $meta_key3_value . '(ов), отсортированных по ' . $meta_key1 . ', ' . $meta_key2;
foreach ($postids as $id) {
$post = get_post($id);
setup_postdata($post);
?>
Пример 5: Список постов с определенным пользовательским полем (ЦВЕТ)
Но они отсортированы по значению другого пользовательского поля (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 'Список постов с ' . $meta_key1 . ', отсортированных по ' . $meta_key2;
foreach ($postids as $id) {
$post = get_post($id);
setup_postdata($post);
?>
Изменения
С версии 0.71 метод был внедрен.
Код метода WPDB::get_col()
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();
// Извлекаем значения столбца.
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;
}