Метод get_col() в WordPress: получение одного столбца из базы данных

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

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *