php – 在我的情况下避免循环内的查询
发布时间:2020-12-13 17:22:42 所属栏目:PHP教程 来源:网络整理
导读:我这里的情况非常复杂.我没有找到更好的方法来解决这个问题,而不是在我进入该页面时将一个SELECT查询放入一个滚动超过70000次的循环中(不用担心,我使用array_chunk将数组拆分成页面).我想如果我在这里使用查询,这将是一个资源杀手.因此,我在这里问一个问题.
我这里的情况非常复杂.我没有找到更好的方法来解决这个问题,而不是在我进入该页面时将一个SELECT查询放入一个滚动超过70000次的循环中(不用担心,我使用array_chunk将数组拆分成页面).我想如果我在这里使用查询,这将是一个资源杀手.因此,我在这里问一个问题.
我有这个需要循环的大数组: $images = scandir($imgit_root_path . '/' . IMAGES_PATH); $indexhtm = array_search('index.htm',$images); unset($images[0],$images[1],$images[$indexhtm]); 现在我有一个数组,其中包含我的IMAGES_PATH中文件(图像)的所有文件名.现在问题来了: 其中一些图像在数据库中注册,因为注册用户的图像列在我的数据库中.现在我需要根据上面的数组给我的图像名称检索user_id. 在循环中我只是这样做: foreach ($images as $image_name) { $query = $db->prepare('SELECT user_id FROM imgit_images WHERE image_name = :name'); $query->bindValue(':name',$image_name,PDO::PARAM_STR); $query->execute(); $row = $query->fetch(PDO::FETCH_ASSOC); $user_id = $row['user_id']; echo $user_id; } 这工作正常,但效率等于0.使用user_id我计划从imgit_users表中获取其他东西,例如用户名,这将需要在该循环内进行另一个查询. 这太多了,我需要一种更简单的方法来解决这个问题. 有没有办法在进入循环之前获取这些user_id并在循环中使用它们? 这是imgit_images的表结构: 虽然这是imgit_users的架构: 解决方法
像这样的东西可以工作(我不确定是否可以准备WHERE IN查询,因为值的数量是未知的……否则,请确保你对$images进行整理):
$image_names = "'".implode("','",$images)."'"; $query = $db->prepare("SELECT img.user_id,image_name,username FROM imgit_images img INNER JOIN imgit_users u ON u.user_id = img.user_id WHERE image_name IN(".$image_names.")"); $query->execute(); while($row = $query->fetch(PDO::FETCH_ASSOC)) { echo $row['user_id']."'s image is ".$row['image_name']; } 你可能需要调整一下(没有测试过),但你似乎能够,所以我并不担心! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |