我在这里有一个相当复杂的情况。我找不到一个更好的方法来解决这个问题,而不需要在进入该页面时将SELECT查询放入循环700多次的循环中(不用担心,我使用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_id
s并在循环中使用它们?
这是imgit_images
表结构:
虽然这是imgit_users
模式:
您应该检查',其中X IN(...)' http://stackoverflow.com/questions/9736284/mysql-where-in – mbinette
说实话,我想过,但然后我再也不知道如何在循环中使用带有user_ids的数组,然后获取用户名。我怎么知道哪个'image_name'适合'user_id'和两个不同的数组? – Aborted
您可以在循环中选择'user_id'和'image_name',这样就可以获得两者之间的关联。 – mbinette