我在這裏有一個相當複雜的情況。我找不到一個更好的方法來解決這個問題,而不需要在進入該頁面時將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