Вопрос или проблема
У меня есть таблица с фондами аккаунта в базе данных WordPress. Структура такая:
Id user_id fund_user type_operation
-----------------------------------------------------------
1 1379 100 admin_op
2 1565 500 admin_op
3 1379 -50 pay
4 1379 200 admin_op
5 1616 -150 pay
И на моей странице WordPress я хочу отобразить следующее:
Только admin_op текущего вошедшего пользователя в type_operation, ПОЛУЧИТЬ ИТОГО только положительные значения fund_user.
У меня есть это:
global $wpdb;
$result_good = $wpdb->get_results("Select sum(fund_user) as good_points from wp_ywf_user_fund_log where type_operation='admin_op'");
$haha= "Total Points for Good =".$result_good['good_points'];
echo $haha;
return $haha;
но это ничего не возвращает, и я не могу отредактировать это для моего конкретного запроса.
Как я могу получить и вывести в этой таблице для текущего пользователя, значение Общего fund_user для определенного type_operation?
Спасибо за все ответы.
Если выполнение операции в SQL-запросе не является строго необходимым, я предпочел бы выполнить ее с массивом данных admin_op, например: op_sum = get_results( Select fund_user FROM table WHERE type_operation = admin_op ); затем var = array_sum(op_sum);
Ответ или решение
Теория:
Чтобы извлечь и отобразить сумму значений из столбца в таблице MySQL на основе условий, в данном случае фильтрация по user_id
и type_operation
, необходимо использовать правильный SQL-запрос и корректно обрабатывать результаты в PHP. WordPress предоставляет встроенные функции, такие как $wpdb
, которые помогают взаимодействовать с базой данных безопасно и удобно. Когда задача стоит в том, чтобы отфильтровать по текущему пользователю и типу операции, важно учесть, что условие фильтрации по положительным значениям также может быть включено в SQL-запрос.
Пример:
Ваша таблица имеет следующую структуру:
Id user_id fund_user type_operation
-----------------------------------------------------------
1 1379 100 admin_op
2 1565 500 admin_op
3 1379 -50 pay
4 1379 200 admin_op
5 1616 -150 pay
Необходимо отобразить сумму fund_user
для текущего пользователя, фильтруя только по типу операции admin_op
и положительным значениям. Для выполнения этой задачи можем использовать следующий SQL-запрос:
global $wpdb;
// Получаем текущего пользователя
$current_user_id = get_current_user_id();
// Выполняем SQL-запрос для получения суммы
$total_points = $wpdb->get_var($wpdb->prepare("
SELECT SUM(fund_user)
FROM wp_ywf_user_fund_log
WHERE user_id = %d
AND type_operation = 'admin_op'
AND fund_user > 0
", $current_user_id));
// Отображаем результат
echo "Общая сумма для текущего пользователя: " . $total_points;
Применение:
-
Понимание SQL-запроса: Здесь используется функция
get_var()
, которая возвращает одно значение из базы данных. Мы фильтруем строки, гдеtype_operation
равноadmin_op
и значение в столбцеfund_user
больше нуля, чтобы исключить отрицательные значения при добавлении. -
WordPress и безопасность: Метод
prepare()
защищает вашу базу данных от SQL-инъекций, так как он корректно экранирует переменные, добавляемые в запрос. -
Аутентификация: Использование функции
get_current_user_id()
гарантирует, что данные будут считаться только для залогиненного пользователя, что соответствует требованиям задачи.
Таким образом, легкий доступ к данным и их обработка с использованием встроенных возможностей WordPress позволяет создать надежное и безопасное решение. Это важно при работе с важными финансовыми данными и при предоставлении персонализированного контента для пользователей вашего сайта.