【问题标题】:How to compare database data in php如何在php中比较数据库数据
【发布时间】:2020-05-04 01:42:43
【问题描述】:

我想比较php中的数据库数据。

这是我的桌子

hospital_payment_data 表

  id      | date  |     cash_amount_received
----------------------------------
  1        2020-04-01      7000
  2        2020-04-29      1000
  3        2020-04-29      2000
  4        2020-04-29      3000
  5        2020-04-29      4000
  6        2020-04-29      5000
  7        2020-04-29      6000
  8        2020-04-29      70000

cash_receipt_publish 表

  id      |    date  |    amount
----------------------------------
  1             2020-04-29       1000
  2             2020-04-29       2000
  3             2020-04-29       3000
  4             2020-04-29       4000
  5             2020-04-29       5000
  6             2020-04-29       5000
  7             2020-04-29       7000

这是我的 sql 语法

    SELECT ifnull(hospital_payment_data.id,'-') AS pg_id, 
ifnull(hospital_payment_data.date,'-') AS pg_date, 
ifnull(hospital_payment_data.cash_amount_received,'-') AS pg_amount, 
ifnull(cash_receipt_publish.id,'-') AS van_id, 
ifnull(cash_receipt_publish.date,'-') AS van_date, 
ifnull(cash_receipt_publish.amount,'-') AS van_amount
FROM hospital_payment_data
LEFT JOIN cash_receipt_publish ON hospital_payment_data.id = cash_receipt_publish.id
            UNION ALL
            SELECT ifnull(hospital_payment_data.id,'-') AS pg_id, ifnull(hospital_payment_data.date,'-') AS pg_date, ifnull(hospital_payment_data.cash_amount_received,'-') AS pg_amount, 
            ifnull(cash_receipt_publish.id,'-') AS van_id, ifnull(cash_receipt_publish.date,'-') AS van_date, ifnull(cash_receipt_publish.amount,'-') AS van_amount
            FROM hospital_payment_data
            RIGHT JOIN cash_receipt_publish ON hospital_payment_data.id = cash_receipt_publish.id
            WHERE hospital_payment_data.id IS NULL limit 0

在此网页结果中

我想要结果

如果日期和金额匹配或金额匹配,我想 通过将表与表中的表进行比较,将其表示为 False cash_receipt_public。

id     |  cash_amount_received    |    amount|    result
-----------------------------------------------------
  1          7000                    7000          true
  2          1000                    1000          true
  3          2000                    2000          true
  4          3000                    3000          true
  5          4000                    4000          true
  6          5000                    5000          true
  7          6000                    null          false
  8          10000                   null          false
  9          null                    5000          false

【问题讨论】:

  • “id”从何而来?他们没有意义。同时标记您正在使用的数据库。

标签: php sql compare mariadb


【解决方案1】:

我认为你可以使用full join

select coalesce(hpd.cash_amount_received, cpr.amount),
       coalesce(hpd.date, cpr.date),
       (case when hpd.id is not null and crp.id is not null then 'true' else 'false' end)
from (select hpd.*, 
             row_number() over (partition by date, cash_amount_received order by id) as seqnum
      from hospital_payment_data hpd
     ) hpd full join
     (select crp.*,
             row_number() over (partition by date, amount order by id) as seqnum
      from cash_receipt_publish crp
     ) crp
     on hpd.date = crp.date and
        hpd.cash_amount_received = crp.amount and
        hpd.seqnum = crp.seqnum;

编辑:

在 MariaDB 中,您可以使用:

select amount, min(date),
       (count(*) = 2)
from ((select hpd.date, cash_amount_received as amount,
              row_number() over (partition by cash_amount_received order by id) as seqnum
       from hospital_payment_data hpd
      )  union all
      (select crp.date, amount,
              row_number() over (partition by amount order by id) as seqnum
       from cash_receipt_publish crp
      )
     ) x
group by amount, seqnum

【讨论】:

  • @전준휘 。 . .您应该用数据库标记问题。
  • 非常感谢。你是个天才。但缺少一个条件。即使日期不同且金额正确,也应使用 True。但它显示为 False。我该怎么办?
  • 结果如我所愿。谢谢
猜你喜欢
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-08
  • 2023-03-23
  • 2020-03-27
  • 1970-01-01
相关资源
最近更新 更多