2011-01-24 44 views
0

我在SQLite3中創建了以下表來標記項目(在讀取this great response後)。標籤保存在表中標籤和ItemTags將顯示一個項目(來自表項目)和一個或多個標籤(來自表格標籤)之間的關係。從/表在其他表中使用INT PRIMARY KEY值,調用相同的數據庫

CREATE TABLE Items ItemID INTEGER PRIMARY KEY, Title TEXT, Comment TEXT;  
CREATE TABLE Tags TagID INTEGER PRIMARY KEY, Title TEXT; 
CREATE TABLE ItemsTags ItemID INTEGER, TagID INTEGER; 

當提交一個新行,用戶將輸入標題和註釋(將在表格中的項目被保存)和一個或多個標籤(這是選擇的選擇/加標籤)。到目前爲止,我已經爲實例管理要做到這一點:

INSERT INTO Items (Title, Comment) VALUES ('First title', 'First comment'); 

我想列條目標識號是一個INTEGER PRIMARY KEY,但在同一時間,我想訪問相同的呼叫該值。說,例如,我的表標籤具有以下佈局:

TagID | Title 
------|---------- 
    1 | First tag 
    2 | Second tag 

而且我要標記的上述說法(「第一個冠軍」,它具有TitleID 1)標籤識別1和2,保存與表格ItemsTags的關係。完成後,我想要進行以下更改:

Table: Items 

TitleID | Title  | Comment 
--------|-------------|-------------- 
     1 | First title | First comment 

Table: Tags 

TagID | Title 
------|---------- 
    1 | First tag 
    2 | Second tag 

Table: ItemsTags 

TagID | ItemID 
------|--------- 
    1 | 1 
    2 | 1 

我該如何實現這一目標?提前致謝!

回答

3

您不能通過一次調用數據庫將行插入到兩個單獨的表中,也不能通過一次調用將兩行插入到同一個表中。您需要在此爲四個:

INSERT INTO Items (Title, Comment) VALUES ('First title', 'First comment'); 
SELECT last_insert_rowid() -- To get last inserted id 
INSERT INTO ItemTags (TagID, ItemID) VALUES (1, :LastID) 
INSERT INTO ItemTags (TagID, ItemID) VALUES (2, :LastID) 

如果你把他們都在事務內,他們都將得到承諾在同一時間,只有一個單一的鎖,放置在數據庫文件。

+0

謝謝!我刪除了SELECT語句,並用`INSERT INTO ItemTags(TagID,ItemID)VALUES(1,(last_insert_rowid());'替換它'現在一切似乎都正常! – mei 2011-01-25 00:05:45

相關問題