【发布时间】:2012-12-31 14:40:10
【问题描述】:
我这里的情况很复杂。如果不将 SELECT 查询放在一个循环中,当我进入该页面时,我找不到更好的方法来解决这个问题(别担心,我使用 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 表中获取其他内容,例如 username,这将需要在该循环中进行另一个查询。
这太多了,我需要一种更简单的方法来处理这个问题。
有没有办法在进入循环之前获取那些user_ids 并在循环中使用它们?
这是来自imgit_images 的表结构:
虽然这是imgit_users 的架构:
【问题讨论】:
-
你应该检查
WHERE x IN(...)stackoverflow.com/questions/9736284/mysql-where-in -
老实说,我想过这个问题,但是我又不知道如何在循环中使用带有 user_ids 的数组,然后也获取用户名。我怎么知道哪个
image_name适合user_id与两个不同的数组? -
您可以选择
user_id和image_name,这样在循环中,您就有了两者之间的关联。 -
Select
image_name, user_id, username...for all 来自imgit_images的记录,将其转换为以image_name为索引的关联数组,将此数组推入更快的存储空间(例如memcached )。在页面加载时从 memcached 中获取它。仅在更改/添加某些图像时查询 MySQL 以刷新存储在 memcached 中的结果。 -
根据这些 cmets 检查我的答案。