SQL从结果数据库中选择subCode及其得分,并将其输出为一个字符串

时间:2013-05-15 15:25:20

标签: mysql sql

我有一个结果表,其中包含以下描述。我需要一种循环遍历表并获得某个admNo的subCode和等级的方法,并将它们组合成一个字符串,以便通过SMS发送它。消息内容应如下所示:

2129 CAT1 101 A- 102 C+ 121 A 231 C+. 

结果表的内容......

id  admNo   examtyp subCode  termId formId  streamId score  grade   points  year
1   2129    CAT1    101      1  3   0   87  A-  11  2013
1   2129    CAT1    102      1  3   0   65  C+  7   2013
1   2129    CAT1    121      1  3   0   90  A   12  2013
1   2129    CAT1    231      1  3   0   67  C+  7   2013
1   2129    CAT1    233      1  3   0   66  C+  7   2013
1   2129    CAT1    311      1  3   0   65  C+  7   2013
1   2129    CAT1    313      1  3   0   90  A   12  2013
1   2129    CAT1    565      1  3   0   60  C   6   2013
2   4093    CAT1    101      1  3   0   0   C+  7   2013
2   4093    CAT1    102      1  3   0   70  B-  8   2013

上表列出了学生的科目分数。如果有一种方法可以在获取之后遍历数组,那么这也可以。

2 个答案:

答案 0 :(得分:1)

如果您希望邮件内容看起来像您的示例,则每admNo / examtyp行可以执行一行:

select concat(admNo, ' ', examtyp, ' ', 
              group_concat(concat(subcode, ' ', grade) separator ' '),
              '.'
             ) MessageLine
from Results r
group by admNo, examtyp

答案 1 :(得分:0)

这个PHP代码可以满足您的需求:

$admNo = 4093;

$DB_NAME = "*dbname*";
$DB_HOST = "*hostname*";
$DB_USER = "*dbusername*";
$DB_PASS = "*dbpassword*";
$mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}
$query = "SELECT * FROM results WHERE admNo=$admNo";
$result = $mysqli->query($query) or die($mysqli->error);
$total = $mysqli->affected_rows;
$linea = $result->fetch_assoc();
$string = $linea['admNo'].' '.$linea['examtyp'].' '.$linea['subCode'].' '.$linea['grade'].' ';
for($i = 0; $i < $total-1; $i++){
    $linea = $result->fetch_assoc();
    $string .= $linea['subCode'].' '.$linea['grade']. ' ';
}
print $string;

输出:

4093 CAT1 101 C+102 B-

此PHP代码将使用输出中显示的格式填充$ string输出,并从表中admNo的所有条目创建它。然后,您可以使用该字符串执行SQL插入,以根据需要将其放入sms表中

这是你需要的吗?