【问题标题】:fetch values from different table having same fields从具有相同字段的不同表中获取值
【发布时间】:2018-10-05 21:39:02
【问题描述】:

我有一个网页在 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 中执行此代码时,它显示“当前选择不包含唯一列。网格编辑、复选框、编辑、复制和删除功能不可用。”我担心这个警告会影响我在网页中的代码执行 谁能帮帮我

【问题讨论】:

  • 该警报仅表示您没有唯一的列-它不会影响您的代码执行,只会尝试在 phpMyAdmin 中进行编辑等-即,正如文本所述(您应该看看如果它与你有关)。所以,您已经更改了代码,现在您说“我的页面工作正常”——这是否意味着您不需要更多帮助?
  • 有了那个代码不影响代码执行,那就没有问题了。感谢您的帮助

标签: mysqli


【解决方案1】:

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

【讨论】:

  • 其实这不是问题,因为我使用了单个分支名称而不是那个变量。我的问题是当我使用此代码时,所有值都返回而不是 3 个月的值。但是当我从一个表中获取时,它会返回正确的 3 个月值。
  • 然后您应该将您的问题更改为您所说的内容......显示“来自单个表的此 sql 返回正确的 3 个月值”,然后显示没有的。不要以为任何人都可以神奇地理解您的数据和布局等 - 从一些“复杂”的查询中,其他人很难帮助您,所以“拼写出来”(我被教导的一种方法是“说得像您正在向三年级学生解释它”-当您这样做时,您通常会自己修复它,或者至少其他人可以轻松地提供帮助。
  • 真的很抱歉。对于我所做的复杂性。
  • 没问题,你正在学习。只是'帮助别人帮助你'。如果您还可以从每个表中提供一些应该有帮助的示例数据(是的,它会很多,但是从未看过您的数据的人怎么能理解呢?)。我的猜测是,由于所有重复使用“total1”,您正在覆盖所有“不同”数据,但在提供更多信息之前不确定。您可以尝试更改“total1”以匹配表格(即“formresult5”的“total5”等 - 然后查看结果。我只是没有看到您如何将它们组合在一起......
  • 我有 6 个表来存储 6 类分类员工的评估结果。 empid(employee id), name, total 是所有表的相同字段,我需要获取相同的列,而 sum(total) 表示前三个月总分的总和
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
  • 2019-05-11
  • 1970-01-01
  • 2010-10-13
  • 1970-01-01
相关资源
最近更新 更多