Вопрос или проблема
Я хочу получить количество одинаковых meta_value у meta_key == ‘parent_id’. Как я могу это сделать?
Какой должен быть запрос WordPress для подсчета записей в той же таблице?
//установите 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-запрос. Давайте подробно разберем, как это сделать.
-
Подготовка данных: Убедитесь, что глобальная переменная
$wpdb
правильно инициализирована. Эта переменная отвечает за работу с базой данных в WordPress и позволяет выполнять безопасные SQL-запросы с использованием методаprepare
для защиты от SQL-инъекций. -
Формирование запроса: Чтобы получить количество записей с одинаковыми значениями
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>';
}
- Пояснения:
$wpdb->prepare
: Используем метод для безопасного формирования SQL-запроса. Место держатель %s используется для замены строковой переменной.get_results
: Метод извлекает результаты запроса в виде массива объектов.GROUP BY meta_value
: Группирует записи поmeta_value
, что позволяет подсчитывать количество для каждого уникального значенияmeta_value
.- Экранирование вывода: Для безопасности и защиты от XSS атак используем функции
esc_html()
.
Этот подход позволяет эффективно и безопасно подсчитать количество записей с одинаковыми значениями meta_value
в WordPress, что может быть полезно, например, для статистического анализа или отчетности.
Такой подход обеспечит ясность и аккуратность в работе с базой данных, а использованные методы позаботятся о безопасности вашего приложения.