2012-09-25 146 views
1

我有兩個表,圖像和CATEGORIES。PHP和MYSQL:插入外鍵

CATEGORIES與圖像是1:M的關係(許多圖像可以有1個類別)。

我想從文件系統中插入圖片數據庫,在該方式動態地分配外鍵類別。

我想用單個插入實現這一點,但現在看來,我需要一個插入圖像的每個類別,如下所示:

$allimages = scandir('./images/all_images/'); 
$category1= scandir('./images/category1/'); 
$category2= scandir('./images/category2/'); 

//CATEGORY 1: 
for($x=0; $x<count($category1); $x++) 
{ 
if(!is_dir(IMAGES_PATH . $category1[$x])) 
{ 
    INSERT INTO images (imgid, imgname, categoryfk) VALUES ('$x', '$category1', 1) 

//CATEGORY 2: 
for($x=0; $x<count($category2); $x++) 
{ 
if(!is_dir(IMAGES_PATH . $category2[$x])) 
{ 
    INSERT INTO images (imgid, imgname, categoryfk) VALUES ('$x', '$category2', 2) 

//CATEGORY 3: 
for($x=0; $x<count($allimages); $x++) 
{ 
if(!is_dir(IMAGES_PATH . $allimages[$x])) 
{ 
    INSERT INTO images (imgid, imgname, categoryfk) VALUES ('$x', '$allimages', 3) 

這真的是我唯一可以做到的嗎?我可以在單個插入和循環中實現此類別分配嗎?

謝謝!

回答

3

此外,您還可以通過插入的結果一下就飛外鍵查找,例如查找爲「1類」的外鍵,然後插入一個新的形象這一類引用:有關環路

INSERT INTO Images(imgId, imgname, categoryFk) 
    SELECT 9876, 'photo1.jpg', cat.categoryId 
    FROM Category cat 
    WHERE cat.categoryName = 'Category 1'; 

SQLFiddle here

+0

非常感謝,小提琴非常棒。唯一的問題是,我需要遍歷3個不同的目錄(category1,category2和allimages),因爲我不希望每次向文件系統添加圖像時都要運行獨特的插入操作......並將它們插入數據庫...也動態分配正確的類別。那麼我需要3個循環(如上所示)? – Growler

2

不知道我理解正確,但是從我的理解,這應該這樣做:

INSERT INTO images 
    (imgid, imgname, categoryfk) 
VALUES 
    ('$x', '$category1', 1), 
    ('$x', '$category2', 2), 
    ('$x', '$allimages', 3) 
+0

這將工作,但什麼?對於($ x = 0; $ x Growler

+0

@Growler:哪個循環?我的問題沒有看到一個循環。 –

+0

我已更新問題 – Growler