Форум

Домой Основной раздел Помощь веб-разработчикам Сложить результаты строк для нужного столбца, полученного из Базы данных PHP
6ответ(ов) в теме
Apocalypse
не в сети 4 дня
На сайте с 27.08.2018
Администратор
Тем 1
Сообщения 82
1
19:56

Значит, есть у меня вот такой код -шаблон:

if($name == 'points') {
    $resultat = mysql_query("SELECT * FROM `wp_gamipress_user_earnings` WHERE `user_id` =  $id AND `post_type` = 'points-award' OR `user_id` =  $id AND `post_type` = 'points-deduct' ASC");
}

if($name == 'points') {
  while($row = mysql_fetch_assoc($resultat)) {
    echo ' ~' . $row['points'] . '~ ;
  }
}

Мне нужно сначала сложить все строки со значением `post_type` = 'points-award' и потом вычесть из этого `post_type` = 'points-deduct'

Al-Sher
не в сети 2 дня
На сайте с 13.06.2015
Администратор
2
20:02

В теории, можно написать 2 SQL запроса:

SELECT SUM(points) FROM `wp_gamipress_user_earnings` WHERE `user_id` =  $id AND `post_type` = 'points-award'

SELECT SUM(points) FROM `wp_gamipress_user_earnings` WHERE `user_id` =  $id AND `post_type` = 'points-deduct'

Второй вариант: Пробегаться по всем результатам и считать все это

Редакции сообщения
11.12.2018 20:03Al-SherПричина: не указано
Apocalypse
не в сети 4 дня
На сайте с 27.08.2018
Администратор
Тем 1
Сообщения 82
3
20:19

Al-Sher сказал(а)
В теории, можно написать 2 SQL запроса:

SELECT SUM(points) FROM `wp_gamipress_user_earnings` WHERE `user_id` =  $id AND `post_type` = 'points-award'

SELECT SUM(points) FROM `wp_gamipress_user_earnings` WHERE `user_id` =  $id AND `post_type` = 'points-deduct'

Второй вариант: Пробегаться по всем результатам и считать все это

Вот что получилось, в итоге, но выводит пустоту:

if($name == 'points') {
$resultat = mysql_query("SELECT SUM(points) FROM `wp_gamipress_user_earnings` WHERE `user_id` =  $id AND `post_type` = 'points-award'");
}

if($name == 'points') {
$row = mysql_fetch_assoc($resultat);
echo $row['points'];
}

Apocalypse
не в сети 4 дня
На сайте с 27.08.2018
Администратор
Тем 1
Сообщения 82
4
20:28

Всё получилось. Вот как решил:

if($name == 'points') {
$resultat = mysql_query("SELECT SUM(points) as sum FROM `wp_gamipress_user_earnings` WHERE `user_id` =  $id AND `post_type` = 'points-award'");
$resultat_minus = mysql_query("SELECT SUM(points) as sum FROM `wp_gamipress_user_earnings` WHERE `user_id` =  $id AND `post_type` = 'points-deduct'");
}

if($name == 'points') {
$row = mysql_fetch_assoc($resultat);
$row_minus = mysql_fetch_assoc($resultat_minus);
echo $row['sum'] - $row_minus['sum'];
}

Владимир Масленко
не в сети давно
На сайте с 17.03.2017
Участник
5
21:24

Всё можно делать одним запросом, через UNION и потом уже вычитать из значения 1 строки значение 2

SELECT SUM(points) as sum FROM `wp_gamipress_user_earnings` WHERE `user_id` = $id AND `post_type` = 'points-award' 
UNION 
SELECT SUM(points) as sum FROM `wp_gamipress_user_earnings` WHERE `user_id` = $id AND `post_type` = 'points-deduct'

Либо вообще переложить подсчёт на базу данных:

SELECT A.sum - B.sum AS result 
FROM (SELECT SUM(points) as sum FROM `wp_gamipress_user_earnings` WHERE `user_id` =  $id AND `post_type` = 'points-award')  A, 
     (SELECT SUM(points) as sum FROM `wp_gamipress_user_earnings` WHERE `user_id` =  $id AND `post_type` = 'points-deduct') B;

Apocalypse
не в сети 4 дня
На сайте с 27.08.2018
Администратор
Тем 1
Сообщения 82
6
21:28

Владимир Масленко сказал(а)
Всё можно делать одним запросом, через UNION и потом уже вычитать из значения 1 строки значение 2

SELECT SUM(points) as sum FROM `wp_gamipress_user_earnings` WHERE `user_id` = $id AND `post_type` = 'points-award' 
UNION 
SELECT SUM(points) as sum FROM `wp_gamipress_user_earnings` WHERE `user_id` = $id AND `post_type` = 'points-deduct'

Либо вообще переложить подсчёт на базу данных:

SELECT A.sum - B.sum AS result 
FROM (SELECT SUM(points) as sum FROM `wp_gamipress_user_earnings` WHERE `user_id` =  $id AND `post_type` = 'points-award')  A, 
     (SELECT SUM(points) as sum FROM `wp_gamipress_user_earnings` WHERE `user_id` =  $id AND `post_type` = 'points-deduct') B;

Спасибо! 😀

Вы не имеете права на публикацию сообщений в этой теме