【问题标题】:How to check in another table has no data while doing mysql join?mysql join时如何检查另一个表没有数据?
【发布时间】:2021-08-25 04:29:52
【问题描述】:

我有两个mysql表。

Invoice_details

invoice_no   proje_ID invoice_Date invoice_amount
1004             6
1005             4
1006             2
1007             2
1008             1
1009             7

received_amount_details 

invoice_no        received_amount
1004                 205.00
1004                  40.00
1006                 283.50

Expected ouput: select from invoice_details where proje_ID =6
invoice no        invoice_amount   invoice_Date  received_amount
1004                                                  245.00

Expected ouput: select from invoice_details where proje_ID =2
invoice no        invoice_amount   invoice_Date  received_amount
1006                                                   283.50
1007                                                    0.00 (becoz 1007 invoice is not there in another table called received_amount_details so show total sum 0.00)

Expected ouput: select from invoice_details where proje_ID =7
    invoice no        invoice_amount   invoice_Date  received_amount
    1009                                                  0.00

这是我的查询:

public function many($id) {
   $sql = "SELECT invoice_details.invoice_No, invoice_details.invoice_Date, invoice_details.invoice_amount,
        SUM(received_amount_details.received_amount) as totalreceiptamt
        FROM 
          (SELECT DISTINCT invoice_no, received_amount FROM received_amount_details) AS received_amount_details 
      
         INNER JOIN invoice_details ON received_amount_details.invoice_no = invoice_details.invoice_No
         where invoice_details.proje_ID='7'
         group by invoice_details.invoice_No";

        return $this->db->query($sql)->result();
            }

如果我选择 proje_ID='7' 的发票详细信息,目前会得到一个空结果 我必须在哪里更改我的 php 代码?

当我选择一张发票(发票编号:1004)时,它将显示所有发票详细信息和总收到金额的总和(205.00 + 40.00)。但是如果选择发票(发票编号:1007)我得到空数据,因为这个 1007第二张表中没有发票号。如果在 received_amount_details 表中不存在,则返回发票详细信息和总 received_amount =0.00。 (我想显示项目 id =2 和 total received_amount =0.00 的发票详细信息。)

【问题讨论】:

  • 你为什么要删除你的其他问题?并且当它是具有 0 的不同项目 id 时,您重复了您所说的“项目 id = 2 和总收到金额 = 0.00”的位置

标签: php mysql codeigniter


【解决方案1】:

在 SQL 查询中添加 IF 条件,类似这样。

SELECT invoice_details.invoice_no,
       invoice_details.invoice_date,
       invoice_details.invoice_amount,
       SUM(IF(received_amount_details.received_amount IS NULL
               OR received_amount_details.received_amount = '', 0.0,
               received_amount_details.received_amount)) AS totalreceiptamt
FROM   (SELECT DISTINCT invoice_no,
                        received_amount
        FROM   received_amount_details) AS received_amount_details
       right join invoice_details
               ON received_amount_details.invoice_no =
                  invoice_details.invoice_no
WHERE  invoice_details.proje_id = '7'
GROUP  BY invoice_details.invoice_no 

这将添加 0.0 作为默认值 not received_amount_details.received_amount IS NULL 或空白

我们还在进行右连接以从 invoice_details 页面获取所有值。

您可以在此处了解有关 MYSQL 中 IF 条件的更多信息,

https://www.w3schools.com/mysql/func_mysql_if.asp https://dev.mysql.com/doc/refman/8.0/en/if.html

【讨论】:

  • 检查我更新的答案,这对你有用吗?
  • 是否可以获得待处理金额?比如如果 totalreceiptamt =100 和 invoice_amount =500 我想显示待处理金额 400。
  • 如果 invoice_amount =1000 且 totalreceiptamt=500 且待处理金额显示 500。如果 invoice_amount =2000 且 totalreceiptamt=3000 的另一个示例:显示 -1000
  • 您可以在 select 中再添加一列,减去这两个值。例如invoice_details.invoice_amount - totalreceiptamt在选择totalreceiptamt后添加这个
  • 你能根据那个编辑你的代码吗?
猜你喜欢
  • 1970-01-01
  • 2012-03-15
  • 2017-08-11
  • 2017-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多