Поддержка Проблемы и решения Как выдернуть в массив ID постов

  • Решено rsl89

    (@rsl89)


    Всем привет.
    Получаю такой массив:
    array ( 0 => (object) array( 'ID' => '683', ), 1 => (object) array( 'ID' => '751', ), 2 => (object) array( 'ID' => '770', ), 3 => (object) array( 'ID' => '800', ), 4 => (object) array( 'ID' => '816', ), 5 => (object) array( 'ID' => '830', ), 6 => (object) array( 'ID' => '841', ), 7 => (object) array( 'ID' => '845', ), 8 => (object) array( 'ID' => '863', ), 9 => (object) array( 'ID' => '867', ), )

    как получить из него только ID в массив?

    запрос в бд такой:

    $id_order_posts = $wpdb->get_results(
        "SELECT ID
    	            FROM <code>bs_posts</code>
    	            WHERE post_status = 'finished' 
    	            AND post_type = 'mjob_order'"
    );

    так не работает:
    $id_order_posts1 = $id_order_posts->get('id');

    • Тема изменена 2 года назад пользователем rsl89.
Просмотр 8 ответов — с 1 по 8 (всего 8)
  • Модератор Юрий

    (@yube)

    как получить из него только ID в массив?

    Циклом foreach. PHP для начинающих 🙂

    запрос в бд такой:

    Если нужна только одна «колонка», то для этого существует $wpdb->get_col()

    так не работает:
    $id_order_posts1 = $id_order_posts->get('id');

    С каких пор у массивов появились методы?

    Автор rsl89

    (@rsl89)

    Циклом foreach. PHP для начинающих
    это первое что я сделал, не сработало

    Автор rsl89

    (@rsl89)

    Подскажите как будет выглядеть foreach?

    Модератор Юрий

    (@yube)

    Подскажите как будет выглядеть foreach?

    Всё так плохо? Ладно. Как-то так:

    $ids = array();
    foreach ($id_order_posts as $a) {
     $ids[] = $a->ID;
    }
    
    Автор rsl89

    (@rsl89)

    Спасибо большое!
    Понял свою ошибку! тут накосячил $a->ID.
    Спасибо за помощь!

    Автор rsl89

    (@rsl89)

    а как теперь интегрировать этот массив в запрос на postmeta?

    $amounts_finish = $wpdb->get_results(
        "SELECT meta_value
    	            FROM <code>postmeta</code>
    	            WHERE meta_key = 'amount' 
    	            AND post_id = '$ids'"
    );
    Модератор Юрий

    (@yube)

    AND post_id IN (" . implode(",", $ids) . ")

    Мне кажется, что JOIN в данном случае будет эффективнее, чем два запроса в базу.

    Автор rsl89

    (@rsl89)

    Спасибо Юрий, как всегда выручаете!
    Ранее я не был знаком с JOIN, сейчас ознакомился, хорошая штука.
    Но данный функционал с запросом к БД будет использоваться 1 раз в месяц, так что пока можно оставить и так.
    Но в идеале Вы правы, JOIN тут рулит.

Просмотр 8 ответов — с 1 по 8 (всего 8)
  • Тема «Как выдернуть в массив ID постов» закрыта для новых ответов.