2013-07-13 18 views
0

我有MySQL中的存儲過程的語法如下:我們如何才能將帶有last_insert_id的數組插入到表中?

insert into tbl1 (p1, p2) values (p2, p3); 
    set inserted_id = last_insert_id(); 
    insert into tbl2 (id, image) values (inserted_id, 'list_of_image'); 

現在我不知道我怎樣才能爲這個插入分隔這個圖像列表(即沒有固定的次數)。 有什麼想法?

+0

loop? ............ –

+0

沒錯,但是在圖像數量很高的情況下它有很高的開銷 – Highlan

+0

tbl1和tbl2之間的關係是什麼?你談論的電話號碼有多高? –

回答

1

假設'list_of_image'是包含逗號分隔值,您可以用純SQL

DELIMITER $$ 
CREATE PROCEDURE sp_insert_images(IN p3 VARCHAR(64), IN p4 VARCHAR(64), IN images VARCHAR(512)) 
BEGIN 
    INSERT INTO Table1 (p1, p2) 
    VALUES (p3, p4); 

    INSERT INTO Table2 (id, image) 
    SELECT LAST_INSERT_ID(), SUBSTRING_INDEX(SUBSTRING_INDEX(i.images, ',', n.n), ',', -1) image 
    FROM 
    (
    SELECT images images 
) i CROSS JOIN 
    (
    SELECT a.N + b.N * 10 + 1 n 
     FROM 
     (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a 
    ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b 
     ORDER BY n 
) n 
    WHERE n.n <= 1 + (LENGTH(i.images) - LENGTH(REPLACE(i.images, ',', ''))); 
END$$ 
DELIMITER ; 

做以下打電話給你的SP

CALL sp_insert_images('Some value1', 'Some value2', 'image1, image2, image3'); 

這裏是SQLFiddle演示的字符串。

注:

  1. 這個例子查詢將分裂到100逗號分隔的值。如果您需要更多或更少,您可以通過編輯內部子查詢來調整限制。
  2. 您可能會考慮創建一個永久計數表(數字),並使用它來代替內部選擇(使用別名n),以便即時生成一系列數字。
相關問題