Php 优化我的循环以返回,而不是执行10个查询
我在下面的变量中以数组形式返回了有限数量的学生(10) $result变量是一个数组,它包含学生ID,如下例所示Php 优化我的循环以返回,而不是执行10个查询,php,mysql,arrays,loops,pdo,Php,Mysql,Arrays,Loops,Pdo,我在下面的变量中以数组形式返回了有限数量的学生(10) $result变量是一个数组,它包含学生ID,如下例所示 Array ( [student1] => 4 [student2] => 1 [student3] => 3 [student4] => 2 [student5] => 5 [student6] => 10 [student7] => 12 [student8] => 16 [student9] => 17
Array (
[student1] => 4
[student2] => 1
[student3] => 3
[student4] => 2
[student5] => 5
[student6] => 10
[student7] => 12
[student8] => 16
[student9] => 17
[student10] => 18
)
我尝试的
$values = implode(", ", $result);
$sql = "SELECT sub1, sub2 FROM students WHERE students.id IN (" . $values . ")";
try{
$db = new db();
$db = $db->connect();
$stmt = $db->query($sql);
$subject = $stmt->fetchAll(PDO::FETCH_OBJ);
$db = null;
if(empty($subject)) {
$response->getBody()->write
('{"error":{"message":"Invalid Request}}');
} else {
$subject = json_decode(json_encode($subject), True);
if (in_array("BIO", $subject))
{
return true;
}
else
{
return false;
}
print_r($subject);
}
} catch(PDOException $e) {}
如果您想在发出如下请求后执行查询,我可以确定如何在一次查询中优化我的查询,而不是循环10次查询:
$values = implode(", ", $result);
$sql = "SELECT sub1, sub2 FROM students WHERE students.id IN (" . $values . ")";
这将返回您所有的学生与一个请求
编辑:删除了foreach,谢谢不要惊慌使用
IN()
子句,这比在你的循环中运行一个查询要有效得多。你能告诉我pls@BenM我是一个新手吗?把他们注册的不同科目放在学生表的列中真的会破坏规范化,并且在你继续开发时可能会给你带来其他麻烦。你应该考虑把招生分为一个单独的表格,将学生ID映射到指定的课程。谢谢你,我不同意,但是它不是一个可扩展的项目,只限于10个学生和2个子,每个人都需要用他们提供给我的DBOKAY的方法来解决这个问题。只是觉得值得一提。祝你好运这只返回了第一个学生sub1和sub2。foreach循环是一种非常冗长的方法,可以执行$values=introde(“,”,$result)代码>尝试打印$values以确保您拥有所有ID,并且查询仍然只返回第一个学生的sub1和sub2,而不是所有SUdent?让我们来看看。