我有这个 SQL
查询,我在其中列出了本月付款的人和没有付款的人:
SELECT main.*
FROM (SELECT t1.client_name, t1.total_debts, t2.client_id, sum(payment) payments , t2.date_now ,
CASE MONTH(t2.date_now)
WHEN MONTH(CURDATE()) THEN 'Paid'
ELSE 'Not Paid'
END current_month
FROM client_debts t1 INNER JOIN client_details t2 ON t1.id = t2.client_id
GROUP BY t2.client_id) main
WHERE main.total_debts<> main.payments;
所以我得到了这个结果:
正如我们在图片中看到的,我有同一个客户,这个月支付了一件商品的费用,但他没有支付另一件商品的费用,所以实际上,他来我店里给了我钱,所以我需要将他的名字作为 Not Paid
从列表中删除,并保留显示 Paid
的行。
以及如何在 PHP 中运行此查询,以便将其放入表格中进行显示。 I tried the answer here in this link
$sql = "SELECT main.*
FROM (SELECT t1.client_name, t1.total_debts, t2.client_id, sum(payment) payments , t2.date_now ,
CASE MONTH(t2.date_now)
WHEN MONTH(CURDATE()) THEN 'Paid'
ELSE 'Not Paid'
END current_month
FROM client_debts t1 INNER JOIN client_details t2 ON t1.id = t2.client_id
GROUP BY t2.client_id) main
WHERE main.total_debts<> main.payments;";
$stmt = $conn->prepare($sql);
$exec = $stmt->execute();
$res = $stmt->fetchAll();
然后是 HTML:
<div class="col-lg-6">
<table>
<?php foreach($res as $row){ ?>
<tr>
<td><?php echo $row['t1.client_name']; ?></td>
</tr>
<?php } ?>
</table>
</div>
但它一直告诉我:
Notice: Undefined index: id in C:\wamp\www...
最佳答案
您的 SQL 问题可以通过在 where
子句末尾添加 and
条件来处理。这是假设所有行都有权支付该付款期限。如果数据跨越多个月,那么我们需要另一个查询。
SELECT main.*
FROM (SELECT t1.client_name, t1.total_debts, t2.client_id, sum(payment) payments , t2.date_now ,
CASE MONTH(t2.date_now)
WHEN MONTH(CURDATE()) THEN 'Paid'
ELSE 'Not Paid'
END current_month
FROM client_debts t1 INNER JOIN client_details t2 ON t1.id = t2.client_id
GROUP BY t2.client_id
) main
WHERE main.total_debts<> main.payments
and current_month='Not Paid'
and client_name not in
(select client_name from main
where current_month='Paid'
);
关于php - 更改复杂的 INNER JOIN 查询并使用 PHP 显示它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34761796/