Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 两个表之间的计数更新_Php_Html_Mysql - Fatal编程技术网

Php 两个表之间的计数更新

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

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' && 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。这只是为了说明目的。