Php 很有说服力,如何在一个新字段中计算字段的总和
我有一个DB表,上面有所有科目的学生,每个科目的最终成绩,这是一个相当大的数字,还有一些其他字段,如姓名等 students表有100多列,每个单元格可以有一些预先设置的ID,这些ID稍后会转换为分数/一些愚蠢的反黑客技术,其中几个数字可以代表同一个分数/Php 很有说服力,如何在一个新字段中计算字段的总和,php,laravel,eloquent,dynamicquery,Php,Laravel,Eloquent,Dynamicquery,我有一个DB表,上面有所有科目的学生,每个科目的最终成绩,这是一个相当大的数字,还有一些其他字段,如姓名等 students表有100多列,每个单元格可以有一些预先设置的ID,这些ID稍后会转换为分数/一些愚蠢的反黑客技术,其中几个数字可以代表同一个分数/ || name || surname|| section || math1||math 2||math 16|| physics 1||physics 2 ||... || || Jonah || Smith || A4 ||
|| name || surname|| section || math1||math 2||math 16|| physics 1||physics 2 ||... ||
|| Jonah || Smith || A4 || 17 || 19 || 0 || 193 || ||
|| John ||Doe || A3 || 0 || 0 || 34 ||12 || 0 || ...||
|| Jane ||Doe || A3 || 0 || 0 || 48 ||12 || 154 || ...||
|| Martin||Doe || A3 || 17 || 34 || 96 ||10 || 225 || ...||
理想结果
|| avg.grade || name || surname|| section || math1||math 2||math 16|| physics 1||physics 2||... ||
|| 0.92 || John ||Doe || A3 ||0 || 0 ||... ||12 || 0 || ...||
|| 0.81 || Jane ||Doe || A3 ||0 || 0 ||... ||12 || 154 || ...||
除了
具有到IDs表示的等级的辅助内存表
科目和学生数据
我想得到选择使用拉威尔雄辩模型所有领域和'最终成绩',什么是所有选定的总和。。。高于某个阈值。
下文介绍了这些建议
SELECT *, a FROM `students` WHERE
`name` LIKE "J%" AND `surname` LIKE "D" AND `section` = 'A3'
enter code here
AND (if(`math16`='12',0.76, 0)
+if(`geometry26`='13',0.76, 0) +if(`physics13`='325',1, 0)
+if(`programming06`='551',1, 0) +if(`biology18`='271',0.916, 0)
+ .... )/18.216 as a > 0.75
“12”、“13”、“25”、“551”、“271”是等级代码
从技术上讲,我需要让所有的学生,他们或多或少地得到了相同的课程,在一个给定的起始字母的名字的一些平均成绩。
我的意思是,如果我有约翰,他选修了特定的课程[数学16,成绩为0.76,生物学18,成绩为0.91,…]和简[数学16,成绩为0.76,编程06,成绩为100,…],我想把他们的成绩和他们的成绩汇总在一起,而不包括其他学生
可能还有其他一些可能,可以将所有具有相同字段的行放在一起,但我不知道如何才能做到这一点。
谢谢我不建议将主题保留在students表中,相反,您应该进一步探索规范化数据库,并添加主题和student_主题表。但是,使用当前设置,可以考虑在模型上创建属性,然后附加它。 这样做将允许您在视图中显示属性时只需调用该属性,如下所示:
<table>
<thead>
<tr>
<th>Student</th>
<th>Average Grade</th>
</tr>
</thead>
<tbody>
@foreach($students as $student)
<tr>
<td>{{ $student->name }}</td>
<td>{{ $student->average_grade }}</td>
</tr>
@endforeach
</tbody>
</table>
你可以做以下事情来达到你的目的。假设您希望获得表中2个字段的单独总和,其中字段名称为“ModelName”的表的字段名称为field1和field2,则可以执行以下操作:
$amount = ModelName::select(DB::raw('sum(field1 + field2) as total'))->get();
你能提供一个学生表格/模型的样本和记录吗?你想要的结果是什么?目前还不是很清楚。我的意思是用数据更新你的问题,你的sql语句,这对我来说没有什么帮助。还有你的相关表主题,…@HCK,添加了一些tables@DCR:欢迎就原始海报如何改进其问题提出具体建议,但是责骂OP是没有帮助的。我认为你应该对你的数据库建立一个稍微不同的模型来解耦你的列。学生表中有>100列,这不是很有用,因为——我假设——学生不会同时选修所有这些课程。您可以有一个包含基本学生信息的学生表,然后是一个主题表,其中包含与本课程相关的所有成绩,还可以指定确定应用于该课程的实际成绩的算法。。。然后是另一个表格,其中您将学生与特定学期/课程周期的课程联系起来。谢谢,1。我不知道如何重构/规范化这个表。原因是:预先设置的主题不是那么大,也不是很密集。2.我曾想过这样做,添加一个属性,但请求只是来自about zillion ok的请求,不是zillion,而是~20:。出于某种原因,我确信添加属性会影响每个查询。看来我错了,谢谢。这不是关于科目和学生,但由于保密协议,我不得不重新表述我的问题:4.看来我要在where子句中进行计算。否则会非常耗时。我有上千张唱片没有问题Alexey。您可以做的最有效的事情是规范化数据库。以后这样做会非常耗时,而且只会阻止您扩展应用程序。Ian,这个表已经有数万条记录了。我不知道如何在不破坏所有其他记录的情况下使其正常化。^ u^。-“学生记录”只是系统中的一块“砖头”。每个字段都是加密的。只有在这个特定的查询中,我们才能访问一些字段,能够对它们进行解密并计算出一些结果。
$amount = ModelName::select(DB::raw('sum(field1 + field2) as total'))->get();