我在foreach循环中有一个SQL查询。有时可能有很多,我的意思是要做很多查询,具体取决于几个标准,最多可能有78个查询。
现在,我知道过早优化是所有邪恶的根本原因,但我不想看到78个查询 - 它只是不健康。
以下是代码:
$crumbs = explode(",", $user['data']['depts']);
foreach ($crumbs as &$value) {
$data = $db->query("SELECT id FROM tbl_depts WHERE id = '" . $value . "'");
$crumb = $data->fetch_assoc();
$dsn = $db->query("SELECT msg, datetime FROM tbl_motd WHERE deptid = '" . $value . "'");
$motd = $dsn->fetch_assoc();
if ($motd['msg'] != "") {
<?php echo $motd['msg']; ?>
}
}
我可以做得更好吗?
答案 0 :(得分:1)
我认为这是你想要的。
SELECT msg, datetime
FROM tbl_depts td
INNER JOIN tbl_motd tm ON td.id = tm.deptid
答案 1 :(得分:1)
使用IN MySQL operator
搜索id
的一组值:
$ids = '"' . implode('", "',$crumbs) . '"';
$query1 = "SELECT id FROM tbl_depts WHERE id IN (" . $ids . ")";
$query2 = "SELECT msg, datetime FROM tbl_motd WHERE deptid IN (" . $ids . ")";
因此,您无需使用foreach
循环检索所需的所有数据,因此您只需要2个查询而不是78个。
示例:我有一个名为table
的表,其中有10条记录,其中ID为:1,2,3,4,5,6,7,8,9,10(自动递增)。我知道我需要有ids 1,5,8的记录。我的查询将是:
$sql = "SELECT * FROM `table` WHERE id in (1,5,8);";
如果您不修改&
数组值,我不明白为什么您需要在foreach
循环中使用$crubms
运算符。