Mysql SQL从结果数据库中选择子代码及其分数,并将其作为一个字符串输出

Mysql SQL从结果数据库中选择子代码及其分数,并将其作为一个字符串输出,mysql,sql,Mysql,Sql,我有一个带有以下描述的结果表。我需要一种方法在表中循环,获取某个admNo的子代码和等级,并将它们作为一个字符串放在一起,以便通过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

我有一个带有以下描述的结果表。我需要一种方法在表中循环,获取某个admNo的子代码和等级,并将它们作为一个字符串放在一起,以便通过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

上表存储了学生的科目分数。如果有一种方法可以在获取后循环遍历数组,那么这也会起作用。

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


这是您需要的吗?

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


这就是您所需要的吗?

如果您希望消息内容与您的示例相似,您可以在每个
admNo
/
examtyp
中设置一行:

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

如果希望消息内容与示例类似,则可以在每个
admNo
/
examtyp
中设置一行:

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

为什么示例短信只显示4分,而上面的示例表中该
admNo
有8分?不,这只是我想要的示例,但实际短信应该包含所有子代码和grades@samlebo . . . 为什么要包含子代码的列名?你可以只为“101”和“102”设置一个列,以此类推。@Gordon,这是行不通的,因为子代码是动态的,因为它们代表了学生学习的科目takes@samlebo . . . 您请求的结果查询将具有可变的列数。这不允许用于SQL查询。你有三个选择。使用动态SQL(prepare语句);将多个值连接到一个列中;或者有最多的列数,希望结果合适。为什么示例短信只显示4分,而上面的示例表中该
admNo
有8分?不,这只是我想要的示例,但实际短信应该有所有的子代码和grades@samlebo . . . 为什么要包含子代码的列名?你可以只为“101”和“102”设置一个列,以此类推。@Gordon,这是行不通的,因为子代码是动态的,因为它们代表了学生学习的科目takes@samlebo . . . 您请求的结果查询将具有可变的列数。这不允许用于SQL查询。你有三个选择。使用动态SQL(prepare语句);将多个值连接到一个列中;或者拥有最大数量的列,并希望结果适合。@o0rebelius0o我需要这个:2129 CAT1 101 a-102 C+121 a 231 C+。@o0rebelius0o我需要这个:2129 CAT1 101 a-102 C+121 a 231 C+。哇不知道你可以在纯sql中做这样的事情。打得好sir@o0rebelious0o这里有很多基因库,非常感谢它们。我不知道你可以用纯sql做这样的事情。打得好sir@o0rebelious0o这里有基因库,非常感谢他们