Как подсчитать записи данных в WordPress, которые имеют одинаковое meta_value в таблице wp_postmeta?

Вопрос или проблема

Я хочу получить количество одинаковых meta_value у meta_key == ‘parent_id’. Как я могу это сделать?
Какой должен быть запрос WordPress для подсчета записей в той же таблице?

enter image description here

//установите meta_key в соответствующий мета-ключ настраиваемого поля
$meta_key = 'parent_id';

$allmiles = $wpdb->get_var( $wpdb->prepare( 
  "SELECT meta_value,
  SUM(IF(meta_value = "Purva", 1,0)) AS 'parent_id',
  COUNT(meta_value) AS 'total'
  FROM $wpdb->wp_postmeta
  GROUP BY post_id
  ORDER BY parent_id DESC", 
  $meta_key
) );

echo "<p>Всего миль {$allmiles}</p>"; 

<?php 
   global $wpdb;
   $table_name = $wpdb->prefix . "postmeta"; 
   $login_name = sanitize_user( $_POST['parent_id'] ); 
   $prepare = $wpdb->prepare( "SELECT COUNT(*) FROM $table_name WHERE    meta_value="Purva" AND meta_key = 'parent_id' ", $login_name );
   $myrows = $wpdb->get_results( $prepare );
   echo '<pre>' . print_r( $myrows, true ) . '</pre>';
?>

Я попробовал это и получил значения, но все еще чего-то не хватает…

.

Ответ или решение

Для подсчета количества записей в таблице wp_postmeta WordPress с одинаковым значением meta_value при использовании meta_key ‘parent_id’, необходимо сформировать корректный SQL-запрос. Давайте подробно разберем, как это сделать.

  1. Подготовка данных: Убедитесь, что глобальная переменная $wpdb правильно инициализирована. Эта переменная отвечает за работу с базой данных в WordPress и позволяет выполнять безопасные SQL-запросы с использованием метода prepare для защиты от SQL-инъекций.

  2. Формирование запроса: Чтобы получить количество записей с одинаковыми значениями meta_value при meta_key равным ‘parent_id’, необходимо сгруппировать данные по meta_value и подсчитать количество записей в каждой группе.

Пример кода:

global $wpdb;
$meta_key = 'parent_id';
$table_name = $wpdb->postmeta;

// Создаем SQL-запрос для подсчета записей с одинаковыми значениями meta_value
$query = $wpdb->prepare(
    "SELECT meta_value, COUNT(*) as count
    FROM $table_name 
    WHERE meta_key = %s 
    GROUP BY meta_value 
    ORDER BY count DESC",
    $meta_key
);

// Выполняем запрос
$results = $wpdb->get_results($query);

// Вывод результатов
if (!empty($results)) {
    foreach ($results as $row) {
        echo '<p>Meta Value: ' . esc_html($row->meta_value) . ' - Count: ' . esc_html($row->count) . '</p>';
    }
} else {
    echo '<p>Записей не найдено.</p>';
}
  1. Пояснения:
    • $wpdb->prepare: Используем метод для безопасного формирования SQL-запроса. Место держатель %s используется для замены строковой переменной.
    • get_results: Метод извлекает результаты запроса в виде массива объектов.
    • GROUP BY meta_value: Группирует записи по meta_value, что позволяет подсчитывать количество для каждого уникального значения meta_value.
    • Экранирование вывода: Для безопасности и защиты от XSS атак используем функции esc_html().

Этот подход позволяет эффективно и безопасно подсчитать количество записей с одинаковыми значениями meta_value в WordPress, что может быть полезно, например, для статистического анализа или отчетности.

Такой подход обеспечит ясность и аккуратность в работе с базой данных, а использованные методы позаботятся о безопасности вашего приложения.

Оцените материал
Добавить комментарий

Капча загружается...