Ваш подзапрос может выглядеть так:
SELECT total
FROM donations
WHERE tid = <x>
ORDER BY date DESC
LIMIT 1
Это, конечно, требует, чтобы в вашей таблице был столбец date
. Если вы запустите этот (без внешнего запроса, который у вас уже есть), он должен вернуться с одной строкой, результатом в один столбец, содержащим значение последней суммы для tid = .
Если в таблице еще нет строки для txn = , то она, очевидно, вообще не вернет строку. При использовании в качестве подзапроса для оператора INSERT вам, вероятно, следует проверить NULL и заменить его числовым 0 (ноль). Вот что IFNULL () может сделать для вас.
Объединяя это и то, что у вас уже есть:
mysql_query("INSERT INTO donations(
tid,
email,
amount,
ogrequest,
total
)
VALUES (
'".esc($p->ipn_data['txn_id'])."',
'".esc($p->ipn_data['pay_email'])."',
".(float)$amount.",
'".esc(http_build_query($_POST))."',
IFNULL(SELECT total
FROM donations
WHERE id = ".esc(p->ipn_data[txn_id']."
ORDER BY date DESC
LIMIT 1),0) + ".esc($p->ipn_data['value']
)");