Mysql SQL从结果数据库中选择子代码及其分数,并将其作为一个字符串输出
我有一个带有以下描述的结果表。我需要一种方法在表中循环,获取某个admNo的子代码和等级,并将它们作为一个字符串放在一起,以便通过SMS发送。消息内容应如下所示: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
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这里有基因库,非常感谢他们