php - 合并数据并加入两个表之间的特定列

标签 php mysql

我有两个表,分别是 tbl_product1 和 tbl_product2。

tbl_product1:

model_name
lot_num
status_prod1
datecreated
date_received

tbl_product2:

model_name
lot_num
status_prod2
last_date

我想将这两个表之间的 model_name 和 lot_num 组合在一列中。然后加入来自tbl_prod1和status_prod2、last_date的status_prod1、datecreated、date_received。

我的 sql 查询:

 $query = "SELECT c.model_name, c.lot_num, c.s1, c.s2, c.datecreated, c.date_received, c.last_date
              FROM (SELECT model_name, lot_num, status_prod1 AS s1, NOT NULL AS s2, datecreated, date_received,  NULL AS last_date FROM tbl_product1 WHERE status_prod1 = 'sent' UNION SELECT model_name, lot_num, NOT NULL AS s1, status_prod2 AS s2, NULL AS datecreated, NULL AS date_received, last_date  FROM tbl_product2 WHERE status_prod2 = 'sent')c
    ORDER BY model_name, lot_num ASC";

但是结果并不如我所愿。当我运行此查询时,它显示双 lot_num 和 model_name。我不知道怎么解释。

例如,当我运行我的代码时,此输出将显示:

model_name | lot_num | status_prod1 | status_prod2
---------------------------------------------------
magic1     | 001     | sent         | 
magic1     | 001     |              |  sent
sss        | 100     | sent         |
ddd        | 222     | sent         |
ddd        | 222     |              |  sent

假设表格应该是这样的:

model_name | lot_num | status_prod1 | status_prod2
---------------------------------------------------
magic1     | 001     | sent         | sent
sss        | 100     | sent         |
ddd        | 222     | sent         | sent

最佳答案

你可以通过聚合得到你想要的:

SELECT c.model_name, c.lot_num,
       max(c.s1) as s1, max(c.s2) as s2, max(c.datecreated) as date_created,
       max(c.date_received) as date_received, max(c.last_date)
FROM (SELECT model_name, lot_num, status_prod1 AS s1, NOT NULL AS s2, datecreated, date_received,  NULL AS last_date
      FROM tbl_product1
      WHERE status_prod1 = 'sent' UNION ALL
      SELECT model_name, lot_num, NOT NULL AS s1, status_prod2 AS s2, NULL AS datecreated, NULL AS date_received, last_date 
      FROM tbl_product2
      WHERE status_prod2 = 'sent'
     ) c
GROUP BY c.model_name, c.lot_num
ORDER BY model_name, lot_num ASC

关于php - 合并数据并加入两个表之间的特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27370116/

相关文章:

php - 我如何弹出一个带有 mysql 数据的 jquery 对话框?

MYSQL 如果至少有一个结果不匹配,则将其从

php - 如何检查使用旧版API的MySQL查询是否成功?

php - 将 MySQL 查询结果输出到组合框

php - 如何从 stdclass 对象中获取数据?

php - 检查字符串是否在 PHP 中全部大写

php - 使用 PHP 将 MySQL 输出到 CSV/Excel

mysql - 使用已知 SUM 值的 SQL 查询

php - 如何在 PHP 中将对象转换(转换)为没有类名前缀的数组?

php - 混凝土5 5.7 : using a ServiceProvider cross-package