Php 两个表之间的计数更新
mysql:我有两张桌子。如何从表A中获得每个学生的A级计数,并更新表B中的“A级成绩”列Php 两个表之间的计数更新,php,html,mysql,Php,Html,Mysql,mysql:我有两张桌子。如何从表A中获得每个学生的A级计数,并更新表B中的“A级成绩”列 while($line = mysql_fetch_array($result)) { $studentName = $line["Student"]; mysql_query("UPDATE table-B SET A Grades Achieved = (SELECT COUNT(A) FROM Table-A WHERE Grade = 'A' && Stude
while($line = mysql_fetch_array($result)) {
$studentName = $line["Student"];
mysql_query("UPDATE table-B SET A Grades Achieved =
(SELECT COUNT(A) FROM Table-A
WHERE Grade = 'A' && Student ='$studentName')
WHERE Student ='$studentName' LIMIT 1");
您需要转义表名和列名,因为您使用了
-
和空格字符(顺便说一句,这是个坏主意)。你需要这个:
while($line = mysql_fetch_array($result)) {
$studentName = $line["Student"];
mysql_query("UPDATE `table-B` SET `A Grades Achieved` =
(SELECT COUNT(*) FROM `Table-A`
WHERE Grade = 'A' && Student ='$studentName')
WHERE Student ='$studentName' LIMIT 1");
此外,你真的应该使用事先准备好的陈述;这是一个主要的SQL注入风险。看
最后,正如其他人所指出的,mysql_*已被弃用,您应该使用MySQLi或PDO。以下是您的查询:
UPDATE table-B
SET A Grades Achieved = (SELECT COUNT(A) FROM Table-A WHERE Grade = 'A' && Student ='$studentName')
WHERE Student ='$studentName'
LIMIT 1;
除了关于SQL注入的一般评论(您的代码很容易出现这种情况)和不推荐使用的“mysql”之外,您的查询还存在一些问题。主要问题是表和列的名称中包含需要转义的字符(即空格和连字符)。试试这个:
UPDATE `table-B`
SET `A Grades Achieved` = (SELECT COUNT(*) FROM `Table-A` WHERE Grade = 'A' AND Student = '$studentName')
WHERE Student = '$studentName'
LIMIT 1;
在设计数据库时,最好使用简单的名称,因此不需要转义名称。这实际上只能在SQL中完成:
UPDATE students AS s SET s.a_grades_achieved =
(SELECT COUNT(student) FROM tests AS t
WHERE t.student = s.name AND t.grade = 'A');
我冒昧地重命名了一些字段,因此您必须为应用程序修改它。您可以在中看到它起作用。不要在列名中使用空格,也不要在表名中使用
-
。谢谢Mike。这只是为了说明目的。