首页 > 解决方案 > 从具有相同字段的不同表中获取值

问题描述

我有一个网页,在 3 个月后计算 3 个月的总分。但是标记在不同的领域。所以我需要从具有相同字段的不同表中获取值。我使用了以下查询。任何人都可以更正此查询,因为使用此查询它会加载整个月的值而不是 3 个月的值。但是当我从单个表中获取时,它会正确加载

select empid,name,total1 from ((select *,sum(total)as total1 
from formresult5 GROUP by empid) UNION (SELECT *,sum(total)as total1 
FROM formresult4 GROUP by empid) UNION (SELECT *,sum(total)as total1 
FROM formresult3 GROUP by empid) UNION (SELECT *,sum(total)as total1 
FROM formresult2 GROUP by empid) UNION (select *,sum(total)as total1 
FROM formresult GROUP by empid)) result 
WHERE date BETWEEN DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 3 MONTH), '%Y-%m-01') 
    AND LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH)) 
    AND branch='$branch' ORDER by total1 desc

我有 6 个表来存储 6 类分类员工的评估结果。empid(employee id), name, total 是所有表的相同字段,我需要获取相同的列,而 sum(total) 表示前三个月总分的总和,现在我已将代码编辑为

select empid,name,total1 from ((select *,sum(total)as total1 from formresult6 WHERE date BETWEEN DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 3 MONTH), '%Y-%m-01') AND LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH)) GROUP by empid) 
UNION 
(select *,sum(total)as total1 from formresult5 WHERE date BETWEEN DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 3 MONTH), '%Y-%m-01') AND LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH)) GROUP by empid) 
UNION 
(SELECT *,sum(total)as total1 FROM formresult4 WHERE date BETWEEN DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 3 MONTH), '%Y-%m-01') AND LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH)) GROUP by empid)
 UNION 
(SELECT *,sum(total)as total1 FROM formresult3 WHERE date BETWEEN DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 3 MONTH), '%Y-%m-01') AND LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH)) GROUP by empid) 
UNION 
(SELECT *,sum(total)as total1 FROM formresult2 WHERE date BETWEEN DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 3 MONTH), '%Y-%m-01') AND LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH)) GROUP by empid) 
UNION 
(select *,sum(total)as total1 from formresult WHERE date BETWEEN DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 3 MONTH), '%Y-%m-01') AND LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH)) GROUP by empid)) result 
where branch='$branch' 
ORDER by total1 desc

在此代码中,我的页面正常工作,在 phpmyadmin 中执行此代码时,它显示“当前选择不包含唯一列。网格编辑、复选框、编辑、复制和删除功能不可用。” 我担心这个警告会影响我在网页中的代码执行 任何人都可以帮助我

标签: mysqli

解决方案


您没有展示您如何使用/定义 $branch - 如果您这样保留它,那么除非您的数据中有“$branch”,否则您将看不到任何东西。


推荐阅读