优化此SQL查询

时间:2011-06-27 01:04:56

标签: php mysql

我在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']; ?>
    }
}

我可以做得更好吗?

2 个答案:

答案 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运算符。