php - 更改复杂的 INNER JOIN 查询并使用 PHP 显示它

标签 php mysql sql pdo

我有这个 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;

所以我得到了这个结果:

enter image description here

正如我们在图片中看到的,我有同一个客户,这个月支付了一件商品的费用,但他没有支付另一件商品的费用,所以实际上,他来我店里给了我钱,所以我需要将他的名字作为 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/

相关文章:

sql - 如何在 Sql 中设计 oauth 2.0 访问 token 字段?

php - Paypal Express Checkout 错误(不支持指定的方法)

php - Symfony 2 Doctrine 一对多不写连接表

php - MYSQL 按三列排序

mysql - 在 mysql 中使用 subselect 更新列时遇到问题

sql - 移动平均线/滚动平均线

asp.net - 如何在 Eval 格式字符串中使用单引号

php - 返回 int 时间戳而不是日期时间

php - MySQL 查询给出错误 : unexpected T_CONSTANT_ENCAPSED_STRING

php - 按推荐人排序(相当复杂)